找到所有陣列中消失的數字
阿新 • • 發佈:2022-12-03
找到所有陣列中消失的數字
一、題目描述
給你一個含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; } }