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;
    }
View Code

相关文章: