LeetCode:448. 找到所有数组中消失的数字
抽屉原理
将数换回原本的位置,然后遍历所有的位置, 如果不等于下标加一的, 则说明缺失了
AC Code
class Solution {
public List<Integer> findDisappearedNumbers(int[] nums) {
// 抽屉原理
List<Integer> list = new ArrayList<>();
int len = nums.length;
for(int i = 0; i < len; i++) {
while(nums[i] != nums[nums[i] - 1])
swap(nums, i, nums[i] - 1);
}
for(int i = 0; i < len; i++) {
if(nums[i] != i + 1) list.add(i + 1);
}
return list;
}
public void swap(int[] nums, int a, int b){
int tmp = nums[a];
nums[a] = nums[b];
nums[b] = tmp;
}
}