1. 程式人生 > 其它 >力扣448(java)-找到陣列中所有消失的數(簡單)

力扣448(java)-找到陣列中所有消失的數(簡單)

題目:

給你一個含 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
進階:你能在不使用額外空間且時間複雜度為 O(n) 的情況下解決這個問題嗎? 你可以假定返回的陣列不算在額外空間內。

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/find-all-numbers-disappeared-in-an-array
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。

解題思路:

一、

1.建立一個ArrayList陣列和一個布林型陣列

2.先遍歷一遍nums陣列,把出現過的數字的b[i]設定為true

3.然後遍歷迴圈1-n,如果b[i]=false,則表示nums陣列中沒出現過,則新增到結果陣列中

程式碼:

 

二、

1.建立一個ArrayList陣列和一個HashSet集合(不允許有重複元素)

2.迴圈遍歷,去掉重複元素,新增到新的集合中

3.迴圈遍歷1-n,如果集合中不包含某個元素,就新增到陣列中,最終輸出陣列

 

 小知識:

1.ArrayList 類是一個可以動態修改的陣列,與普通陣列的區別就是它是沒有固定大小的限制

建立ArrayList:

ArrayList<E> objectName =new ArrayList<>(); 

2.新增元素到 ArrayList 可以使用 add() 方法

a.add(i);

3. ArrayList可以使用 for-each 來迭代元素

4.HashSet 基於 HashMap 來實現的,是一個不允許有重複元素的集合
  建立一個 HashSet 物件 b,用於儲存元素

HashSet b = new HashSet()

5.HashSet 類新增元素可以使用 add() 方法

 for(int i = 0; i < n;i++){
            b.add(nums[i]);
        }

6.HashSet 類使用 contains() 方法來判斷元素是否存在於集合當中

 for(int i = 1;i < n + 1; i++){
            if(!b.contains(i)){
                a.add(i);
            }

7.布林陣列,預設值是false,  並且只會列印false或者是true

   根據根據字元陣列的長度建立布林陣列的個數

boolean[] b = new boolean[c.length];