给定一个int数组AB,要求编写一个函数,不使用任何临时变量直接交换第零个元素和第一个元素的值。并返回交换后的数组。
测试样例:
[1,2]
返回:[2,1]
class Exchange { public: vector<int> exchangeAB(vector<int> AB) { // write code here AB.insert(AB.end(), AB.begin(), AB.end()); AB.erase(AB.begin()); AB.erase(AB.end() - 1); return AB; } };
我的方法还是最low的。。
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;
}
通过两个计算两个数的和与差来交换a,b的位置 (a,b)----(a+b,b)----(a+b,a-b)------(b,a-b)----(b,a) import java.util.*; public class Exchange { public int[] exchangeAB(int[] AB) { // write code here AB[0]=AB[0]+AB[1]; AB[1]=AB[0]-2*AB[1]; AB[0]=(AB[0]-AB[1])/2; AB[1]=AB[0]+AB[1]; return AB; } }
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) { // write code here AB[0]=AB[0]^AB[1]; AB[1]=AB[0]^AB[1]; AB[0]=AB[0]^AB[1]; return AB; } }