16.01. Swap Numbers
Description
Write a function to swap a number in place (that is, without temporary vari ables).
Example:
Input: numbers = [1,2] Output: [2,1]
Note:
numbers.length == 2
Solutions
Solution 1: Bitwise Operation
We can use the XOR operation \(\oplus\) to implement the swap of two numbers.
The XOR operation has the following three properties:
- Any number XORed with \(0\) remains unchanged, i.e., \(a \oplus 0=a\).
- Any number XORed with itself results in \(0\), i.e., \(a \oplus a=0\).
- The XOR operation satisfies the commutative and associative laws, i.e., \(a \oplus b \oplus a=b \oplus a \oplus a=b \oplus (a \oplus a)=b \oplus 0=b\).
Therefore, we can perform the following operations on two numbers \(a\) and \(b\) in the array \(numbers\):
- \(a=a \oplus b\), now \(a\) stores the XOR result of the two numbers;
- \(b=a \oplus b\), now \(b\) stores the original value of \(a\);
- \(a=a \oplus b\), now \(a\) stores the original value of \(b\);
In this way, we can swap two numbers without using a temporary variable.
The time complexity is \(O(1)\), and the space complexity is \(O(1)\).
1 2 3 4 5 6 |
|
1 2 3 4 5 6 7 8 |
|
1 2 3 4 5 6 7 8 9 |
|
1 2 3 4 5 6 |
|
1 2 3 4 5 6 |
|
1 2 3 4 5 6 7 8 9 |
|