LeetCode No442. 陣列中重複的資料
阿新 • • 發佈:2022-05-08
題目
給你一個長度為 n 的整數陣列 nums ,其中 nums 的所有整數都在範圍 [1, n] 內,且每個整數出現 一次 或 兩次 。請你找出所有出現 兩次 的整數,並以陣列形式返回。
你必須設計並實現一個時間複雜度為 O(n) 且僅使用常量額外空間的演算法解決此問題。
示例 1:
輸入:nums = [4,3,2,7,8,2,3,1]
輸出:[2,3]
示例 2:
輸入:nums = [1,1,2]
輸出:[1]
示例 3:
輸入:nums = [1]
輸出:[]
提示:
n == nums.length
1 <= n <= 10^5
1 <= nums[i] <= n
nums 中的每個元素出現 一次 或 兩次
思路
模擬雜湊,對於相同值通過一樣的雜湊演算法計算出來的位置一定是一樣的,這樣就可以找出重複的數。
AC程式碼
點選檢視程式碼
class Solution { public List<Integer> findDuplicates(int[] nums) { List<Integer> res = new ArrayList<>(); int n = nums.length; for(int i=0; i<n; i++) { int num = Math.abs(nums[i]); if( nums[num-1]>0 ) { nums[num-1] = -nums[num-1]; } else { res.add(num); } } return res; } }