題目
給你一個非嚴格遞增排列的數組?nums
?,請你原地刪除重復出現的元素,使每個元素?只出現一次?,返回刪除后數組的新長度。元素的?相對順序?應該保持?一致?。然后返回?nums
?中唯一元素的個數。
考慮?nums
?的唯一元素的數量為?k
?,你需要做以下事情確保你的題解可以被通過:
-
更改數組?
nums
?,使?nums
?的前?k
?個元素包含唯一元素,并按照它們最初在?nums
?中出現的順序排列。nums
?的其余元素與?nums
?的大小不重要。 -
返回?
k
?。
思路一:
暴力
先將數組遍歷一遍,在找到相同的元素時,在進行遍歷把每一個數向前覆蓋
class Solution {public int removeDuplicates(int[] nums) {int n = nums.length;for(int i = 1; i < n;i++){if(nums[i] == nums[i-1]){for(int j = i;j < n-1;j++){nums[j] = nums[j+1];}i--;n--;}}return n;}
}
思路二:
雙指針
快指針表示遍歷數組到達的下標
慢指針表示下一個不同元素要填入的下標位置
class Solution {public int removeDuplicates(int[] nums) {if(nums.length == 0)return 0;int fast = 1;int slow = 1;while(fast < nums.length){if(nums[fast] != nums[fast-1]){nums[slow] = nums[fast];slow++;}fast++;}return slow;}
}