陣列中重複的資料
阿新 • • 發佈:2018-11-24
給定一個整數陣列 a,其中1 ≤ a[i] ≤ n(n為陣列長度), 其中有些元素出現兩次,而其他元素出現一次。
找到所有出現兩次的元素。
你可以不用到任何額外空間並在O(n)時間複雜度內解決這個問題嗎?
示例:
輸入:
[4,3,2,7,8,2,3,1]
輸出:
[2,3]
題目分析:
使用額外陣列處理:使用新的陣列存放資料
定義的新陣列儲存元素的方式為:其下標是陣列a中的元素,這樣,只要元素在陣列a中出現一次,新陣列中此元素位置的值就加1,最後遍歷新陣列,如果新陣列中對應位置的值大於1,就返回此位置,即陣列a中的元素;
題目中給出1 ≤ a[i] ≤ n(n為陣列長度),所以陣列a中最大的數只可能是陣列的長度,所以新陣列的大小要定為n + 1(下標從0開始),
程式碼實現:
public List<Integer> findDuplicates(int[] nums) { List<Integer> list = new LinkedList<>(); int n = nums.length; int[] temp = new int[n + 1]; for (int i = 0; i < nums.length; i++) { temp[nums[i]] += 1; } for (int i = 0; i < temp.length; i++
) { if (temp[i] > 1) list.add(i); } return list; }
主函式:
public static void main(String[] args) { A3 a = new A3(); int[] nums = {4,3,2,7,8,2,3,1}; List resList = a.findDuplicates(nums); for (int i = 0; i < resList.size(); i++) { System.out.print
(resList.get(i) + " "); } }
執行結果:
2 3