复杂的代码/算法优化(例如简化)窘迫

far*_*ich 2 java algorithm

如何简化此代码?


  if      (x == 0) x = 1;
  else if (x == 1) x = 0;
  else if (x == 2) x = 3;
  else if (x == 3) x = 2;

Mar*_*ers 15

如果x始终在0到3之间,那么试试这个:

x ^= 1;
Run Code Online (Sandbox Code Playgroud)

它切换最不重要的位.

如果x可以是0到3之间的值,那么您可以先测试:

if (x >= 0 && x <= 3) {
    x ^= 1;
}
Run Code Online (Sandbox Code Playgroud)

  • 您可以使用按位和除2个最低有效位之外的所有位来避免两个不等式比较. (3认同)

irr*_*ble 9

这是最简单的形式:

if      (x == 0) x = 1;
else if (x == 1) x = 0;
else if (x == 2) x = 3;
else if (x == 3) x = 2;
Run Code Online (Sandbox Code Playgroud)

等等......这正是你的代码.

神秘的一个衬里并不简单.


Kar*_*aen 5

要使用伪代码表示法,可能:

if (x % 2 == 0) x = x + 1
   else x = x - 1
Run Code Online (Sandbox Code Playgroud)

例如,如果是偶数,则添加一个,否则减去?然而,在优化方面,我没有看到原始代码的特别慢或错.


Kha*_*ish 5

你可以使用这样的东西:

int mymap[4] = {1,0,3,2};
Run Code Online (Sandbox Code Playgroud)

然后在你的代码中使用这个:

x = mymap[x];
Run Code Online (Sandbox Code Playgroud)

  • 并希望`x`不是<0或> 3. (4认同)