面试题 16.01. 交换数字

编写一个函数,不用临时变量,直接交换numbers = [a, b]ab的值。

示例:

输入: numbers = [1,2]
输出: [2,1]

提示:

  • numbers.length == 2

这是一道看起来非常简单但是我觉得也非常启迪思维的题目

方法一:数学计算

//此方法要充分考虑到溢出的情况
vector<int> swapNumbers(vector<int>& numbers) { if((numbers[0]<=0&&numbers[1]<=0)||(numbers[0]>=0&&numbers[1]>=0)) { numbers[0]=numbers[0]-numbers[1]; numbers[1]=numbers[1]+numbers[0]; numbers[0]=numbers[1]-numbers[0]; } else { numbers[0]=numbers[0]+numbers[1]; numbers[1]=numbers[0]-numbers[1]; numbers[0]=numbers[0]-numbers[1]; } return numbers; }

方法二:异或运算

//一个数与自己异或为0,一个数与0异或不变。这种特殊性质使得异或运算对于特定类型的题目有奇效,比如求数组中出现次数为2的元素
vector<int> swapNumbers(vector<int>& numbers) { numbers[0] ^= numbers[1]; numbers[1] ^= numbers[0]; numbers[0] ^= numbers[1]; return numbers; }
原文地址:https://www.cnblogs.com/Dancing-Fairy/p/12704561.html