1. 程式人生 > 其它 >力扣442(java)-陣列中重複的資料

力扣442(java)-陣列中重複的資料

題目:

給你一個長度為 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 <= 105
1 <= nums[i] <= n
nums 中的每個元素出現 一次 或 兩次

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

解題思路:

1.迴圈陣列,將當前i所對應的數字減去1為新的索引值index;

2.迴圈過程中將各個數做標記,如果nums[index] < 0,則表示已經出現過,新增到結果陣列中,否則就是第一次出現,將值變為相反數。

程式碼:

 標記過程:

 二、

將陣列從小到大排序,再迴圈遍歷陣列,如果後一個數與前一個相等則代表這個數重複兩次,將該數新增到結果陣列中,最後輸出結果陣列。

程式碼:

小知識:

1.List list = new ArrayList();這句建立了一個ArrayList的物件後-給到了List。此時它是一個List物件,有些ArrayList有但是List沒有的屬性和方法,它就不能再用了(就是他們共同有的方法和屬性,可以使用 )

2.Arrays.sort(int[] a)

對陣列進行從小到大排序,預設字典序排序(ASCII)

3.Arrays.sort(int[] a, int fromIndex, int toIndex)

對陣列的a[fromIndex,toIndex-1]排序