力扣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];