Array
448.找出数组中所有消失的数
要求:整型数组取值为 1 ≤ a[i] ≤ n,n是数组大小,一些元素重复出现,找出[1,n]中没出现的数,实现时时间复杂度为O(n),并不占额外空间
思路1:(discuss)用数组下标标记未出现的数,如出现4就把a[3]的数变成负数,当查找时判断a的正负就能获取下标
tips:注意数组溢出
public List<Integer> findDisappearedNumbers(int[] nums) { List<Integer> disList = new ArrayList<Integer>(); //用数组下标来记录出现过的数 for (int i = 0; i < nums.length; i++) { int item = Math.abs(nums[i]) - 1; //判断是否已经出现过 if (nums[item] > 0) { nums[item] = -nums[item]; } } //把仍然是正数所对应的下标加入数组列表中 for (int i = 0; i < nums.length; i++) { if (nums[i] > 0) { disList.add(i + 1); } } return disList; }