// a ^ b = c , c ^ b = a , c ^ a = b
private void swap(int[] nums, int i, int j){
nums[i] = nums[i] ^ nums[j];
nums[j] = nums[i] ^ nums[j];
nums[i] = nums[i] ^ nums[j];
}
leetcode448
找到所有数组中消失的数字
class Solution {
public List<Integer> findDisappearedNumbers(int[] nums) {
int size = nums.length;
List<Integer> res = new ArrayList<>();
for (int i = 0; i < size; i++){
// 此处注意这个while,如果不是while,可能换过来的元素就有可能错过
// nums[nums[i] - 1] 表示nums[i] 这个数真正相待的坑, 其坑中数 是不是 等于这个数
while (nums[nums[i] - 1] != nums[i]){
swap(nums, nums[i] - 1, i);
}
}
for (int i = 0; i < size; i++){
if (nums[i] != i + 1)
res.add(i + 1);
}
return res;
}
// 不用第三方变量就可以交换
// a ^ b = c , c ^ b = a , c ^ a = b
private void swap(int[] nums, int i, int j){
nums[i] = nums[i] ^ nums[j];
nums[j] = nums[i] ^ nums[j];
nums[i] = nums[i] ^ nums[j];
}
}