删除排序数组中的重复项--LeetCode
题目
给你一个非严格递增排列的数组 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;}
}