题目描述
编写一个函数,不用临时变量,直接交换numbers = [a, b]中a与b的值。
示例:
- 输入: numbers = [1,2]
- 输出: [2,1]
提示:
- numbers.length == 2
- -2147483647 <= numbers[i] <= 2147483647
解题思路与代码
-
这道题不让使用额外的变量其实就只剩下了一种做法,那就是使用位运算符。因为使用数学的加法,这道题会溢出。
-
这道题其实就考察了一个知识,就是位运算符中的异或运算符。
-
异或运算符具有以下特性:当一个数与另一个数异或两次时,结果仍然是原来的数。
如果对位运算符知识不了解的,请看我的这篇文章:C++位运算符基础知识
具体的代码实现如下:
class Solution {
public:
vector<int> swapNumbers(vector<int>& numbers) {
numbers[0] = numbers[0] ^ numbers[1];
numbers[1] = numbers[0] ^ numbers[1];
numbers[0] = numbers[0] ^ numbers[1];
return numbers;
}
};
复杂度分析
时间复杂度:O(1)
空间复杂度:O(1)
总结
这道题有点未免太简单了,在我看了一样并不是特别的大。就为了考察这么一小个知识点,我觉得这道题不该是中等难度的题吧。
最后的最后,如果你觉得我的这篇文章写的不错的话,请给我一个赞与收藏,关注我,我会继续给大家带来更多更优质的干货内容。