448J. Find All Numbers Disappeared in an Array

https://leetcode.com/problems/find-all-numbers-disappeared-in-an-array/

这个题可以转化为041解答

使用041

因为041是找到第一个消失的正整数。 这个题找消失的数,那么就直接把所有消失的存起来就好了。

class Solution {
    public List<Integer> findDisappearedNumbers(int[] nums) {
        List<Integer> ans = new LinkedList<>();
        int N = nums.length;

        // 这道题不需要这个过程。
        // for(int i = 0; i < N; i++){
        //     if(nums[i] <= 0 || nums[i] > N) {
        //         nums[i] = N + 1;
        //     }
        // }
        for(int i = 0; i < N; i++){
            int num = Math.abs(nums[i]); 
            if(num > N ) continue;
            num --;
            if( nums[num] > 0){
                nums[num] *= -1;
            }    
        }

        for(int i = 0; i < N; i++){
            if(nums[i] >= 0){
                ans.add(i + 1);
            }
        }
        return ans;
    }
}

Last updated

Was this helpful?