LeetCode 448. 找到所有数组中消失的数字(简单但又恶心的题)

文章目录


题目

给你一个含 n 个整数的数组 nums ,其中 nums[i] 在区间 [1, n] 内。请你找出所有在 [1, n] 范围内但没有出现在 nums 中的数字,并以数组的形式返回结果。

示例 1:

输入:nums = [4,3,2,7,8,2,3,1]
输出:[5,6]

示例2:

输入:nums = [1,1]
输出:[2]

提示:

n == nums.length
1 <= n <= 105
1 <= nums[i] <= n

在这里插入图片描述

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/find-all-numbers-disappeared-in-an-array
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。


简单模拟

直接for循环遍历1到n的所有数字,每次遍历都判断三种情况即可
在这里插入图片描述

class Solution {
    
    
    public List<Integer> findDisappearedNumbers(int[] nums) {
    
    
        int n = nums.length;
        Arrays.sort(nums);
        System.out.println(Arrays.toString(nums));
        ArrayList<Integer> list = new ArrayList<>();
        int j = 1;
        //遍历 1 - n
        for (int i = 0; i < n; ++i) {
    
    
            //判断当前数字j有没有,没有的话j存起来,有的话继续比对
            if (j > nums[i]) {
    
    
                //无操作,等i自己增加。
            } else if (j < nums[i]) {
    
    
                //一旦找到小的,就使劲找到
                list.add(j++);
                //为了防止nums中有重复的数据
                while (j < nums[i]) {
    
    
                    list.add(j++);
                }
                j++;
            } else {
    
    
                //j==nums[i]
                j++;
            }

        }
        while(j<=n){
    
    
            list.add(j++);
        }
        return list;
    }
}

猜你喜欢

转载自blog.csdn.net/qq_44627608/article/details/124496811