首页 > 试题广场 >

无缓存交换

[编程题]无缓存交换
  • 热度指数:7940 时间限制:C/C++ 3秒,其他语言6秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解

给定一个int数组AB,要求编写一个函数,不使用任何临时变量直接交换第零个元素和第一个元素的值。并返回交换后的数组。

测试样例:
[1,2]
返回:[2,1]
Ron头像 Ron
    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;
    }

发表于 2016-06-12 10:58:43 回复(7)
importjava.util.*;
publicclassExchange {
    publicint[] exchangeAB(int[] AB) {
        // write code here
        AB[0]=AB[0]+AB[1];
        AB[1]=AB[0]-AB[1];
        AB[0]=AB[0]-AB[1];
        returnAB;
    }
}
发表于 2015-09-24 22:24:21 回复(2)
public int[] exchange(num[2]){
    num[1] = num[0]^num[1];
    num[0] = num[0]^num[1];
    num[1] = num[0]^num[1];
return num;
}

类似互逆运算可以利用 加减 乘除等实现,但是应该考虑两数的和、积超出int取值范围情况,乘除法应该考虑0的情况。
编辑于 2015-08-13 14:23:06 回复(0)

python 解法,怕是失了智哦。

return [AB[1], AB[0]]
发表于 2017-10-31 17:16:49 回复(2)
位运算

class Exchange {
public:
    vector<int> exchangeAB(vector<int> AB) {
        AB[0] ^= AB[1];
        AB[1] ^= AB[0];
        AB[0] ^= AB[1];
        return AB;
    }
};


运行时间:4ms

占用内存:476k


发表于 2018-12-26 18:47:45 回复(0)
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;
	}
};

发表于 2017-09-04 15:11:53 回复(1)

我的方法还是最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;
    }
发表于 2017-07-30 22:05:17 回复(1)
class Exchange:
    def exchangeAB(self, AB):
        AB[0], AB[1] = AB[1], AB[0]
        return AB

发表于 2016-12-29 07:27:05 回复(0)
public int[] exchangeAB(int[] AB) {
        // write code here
        //^ 异或运算,相同为0 不同为 1, 
        //AB ={1,2};
        AB[0]=AB[0]^AB[1];//AB[0]=3
        AB[1]=AB[0]^AB[1];//AB[1]=1
        AB[0]=AB[0]^AB[1];//AB[0]=2
        return AB;
    }

发表于 2016-08-29 11:22:40 回复(0)
class Exchange {
public:
    vector<int> exchangeAB(vector<int> AB) {
        // write code here
        //假如AB[0]=3,AB[1]=2
        AB[0]=AB[0]+AB[1];//AB[0]=5,AB[1]=2
        AB[1]=AB[0]-AB[1];//AB[1]=3,AB[0]=5
        AB[0]=AB[0]-AB[1];//AB[0]=2,AB[1]=3
        return AB;
    }
};

发表于 2016-08-18 21:56:06 回复(0)

看不懂...

编辑于 2018-05-23 21:08:03 回复(0)
通过两个计算两个数的和与差来交换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;
        
    }
}

发表于 2016-08-30 09:42:55 回复(0)
/*
思路:异或

首先 a ^= b :此时a的值是a^b
其次 b ^= a :此时b的值是a^b^b==a
其次 a ^= b :此时a的值是a^b^a==b


*/
class Exchange {
public:
    vector<int> exchangeAB(vector<int> AB) {
        if(AB.size()==0){
            return AB;
        }

        AB[0] ^= AB[1];
        
        AB[1] ^= AB[0];

        AB[0] ^= AB[1];

        return AB;
    }
};

发表于 2023-04-13 12:24:11 回复(0)
vector<int> exchangeAB(vector<int> AB) {
        // write code here
        //思路:使用异或性质
        //a b
        //ab b
        //ab a
        //b a
        AB[0] ^= AB[1];
        AB[1] ^= AB[0];
        AB[0] ^= AB[1];
        
        return AB;
    }
发表于 2022-03-10 13:35:26 回复(0)
class Exchange:
    def exchangeAB(self, AB):
        # write code here
        AB[0],AB[1] = AB[1],AB[0]
        return AB 
发表于 2022-01-12 10:03:57 回复(1)
class Exchange {
public:
    vector<int> exchangeAB(vector<int> AB) {
        // write code here
        if(AB.size()<2) return {-1,-1};
        if(AB[0]==AB[1]) return AB;
        AB[0]^=AB[1];
        AB[1]^=AB[0];
        AB[0]^=AB[1];
        return AB;
    
    }
    
};

发表于 2021-01-30 14:54:18 回复(0)
例:AB=[7,3]
AB[0]=0111=7
AB[1]=0011=3

AB[0]=AB[0]^AB[1]=0100=4
           0111^0011=0100=4

AB[0]=0100=4
AB[1]=0011=3

AB[1]=AB[0]^AB[1]=0111=7
           0100^0011=0111=7

AB[0]=0100=4
AB[1]=0111=7

AB[0]=AB[0]^AB[1]=0011=3
           0100^0111=0011=3

AB[0]=0011=3
AB[1]=0111=7

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;
    }
}


发表于 2020-10-21 17:20:43 回复(0)
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; } }
发表于 2020-08-14 16:56:31 回复(0)
class Exchange:
    def exchangeAB(self, AB):
        # write code here
        return AB[::-1]

发表于 2020-08-11 09:46:06 回复(0)
class Exchange {
public:
    vector<int> exchangeAB(vector<int> AB) {
        // write code here
        AB.push_back(0);
        AB[2] = AB[0];
        AB[0] = AB[1];
        AB[1] = AB[2];
        AB.pop_back();
        return AB;
    }
};

发表于 2020-08-03 16:59:57 回复(0)