先來看看題目:
給定一個整數陣列 a,其中1 ≤ a[i] ≤ n (n為陣列長度), 其中有些元素出現兩次而其他元素出現一次。
找到所有出現兩次的元素。
你可以不用到任何額外空間並在O(n)時間複雜度內解決這個問題嗎?
示例:
輸入: [4,3,2,7,8,2,3,1]
輸出: [2,3]
其實這個題目最大的難處在於不使用任何的額外空間。如果沒有這個限制的話,我們可以通過遍歷陣列然後通過常規的去重演算法就可以得出結果了。但是有多了這個限制以後我們應該如何去解答呢?
這是我的思路,先給陣列進行排序。使到陣列裡面相同的元素必定會緊挨著排列,接下來我們只需要遍歷陣列篩選出nums[i] === nums[i+1]的資料即可。下面是原始碼:
/**
* @param {number[]} nums
* @return {number[]}
*/
var findDuplicates = function(nums) {
if(!nums || nums.length < 1){return [];}
nums.sort((a,b)=>{
return a-b;
})
nums = nums.filter((item,index)=>{
return nums[index] == nums[index+1];
})
return nums;
};
複製程式碼
歡迎大家共同探討!!