1. 程式人生 > 其它 >找到所有陣列中消失的數字

找到所有陣列中消失的數字

找到所有陣列中消失的數字

一、題目描述

給你一個含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。且陣列中的每個陣列小於等於n。可以使用hash表記錄每一個數組中的數。然後遍歷0-n,如果雜湊表中沒有出現,就是消失的陣列。

三,解題方法

方法1(陣列)
使用一個數組,直接在原陣列中修改值,遍歷源陣列,將陣列的值,在作為原陣列的索引,原地加上n,再使用一個for迴圈,如果其值,小於等於n,就說明沒有出現過,因為出現過的都被加上n。
程式碼實現:

class Solution {
    public List<Integer> findDisappearedNumbers(int[] nums) {

        int n = nums.length;
        for(int i=0 ;i<n; i++){
            int x = (nums[i]-1)%n;
            nums[x] += n;
        }
        
        List<Integer> list = new ArrayList<>();
        
        for(int i=0 ;i<n; i++){
            if(nums[i] <= n){
                list.add(i+1);
            }
        }

        return list;
    }
}