给定一个int数组AB,要求编写一个函数,不使用任何临时变量直接交换第零个元素和第一个元素的值。并返回交换后的数组。
测试样例:
[1,2]
返回:[2,1]
public int[] exchangeAB(int[] AB) { // write code here // 利用异或^运算的性质 AB[0] = AB[0] ^ AB[1]; AB[1] = AB[0] ^ AB[1]; AB[0] = AB[0] ^ AB[1]; return AB; } // AB[0] = AB[0] ^ AB[1] // AB[1] = AB[0]^ AB[1] = AB[0] ^ AB[1] ^ AB[1] = AB[0] ^ 0 = AB[0] // AB[0] =AB[0] ^AB[1] = AB[0] ^ AB[1] ^ AB[0] = AB[1]
import java.util.*; public class Exchange { public int[] exchangeAB(int[] AB) { AB[0]=AB[0]+AB[1]; AB[1]=AB[0]-AB[1]; AB[0]=AB[0]-AB[1]; return AB; // write code here } }还有一个思路,运用异或 ^ 位运算:0^x=x , x^x=0。
import java.util.*; public class Exchange { public int[] exchangeAB(int[] AB) { AB[0]^=AB[1]; AB[1]^=AB[0]; AB[0]^=AB[1]; return AB; } }
如果采用位运算来交换两个元素,则最可能使用的是位异或运算。
如果是位与,一个数的0就会覆盖掉另一个数的0或者1,信息丢失。
如果是位或,一个数的1就会覆盖掉另一个数的0或者1.
而采用位异或,1表明两个位置不同,0表示相同。
public class Exchange {
public int[] exchangeAB(int[] AB) {
AB[1] = AB[0] ^ AB[1];
AB[0] = AB[0] ^ AB[1];
AB[1] = AB[0] ^ AB[1];
return AB;
}
}
import java.util.*; public class Exchange { public int[] exchangeAB(int[] AB) { AB[1] ^= AB[0]; AB[0] ^= AB[1]; AB[1] ^= AB[0]; return AB; } }玩过C的都知道这个吧