看这架势,估计LeetCode 这个月要是双指针专题了…lol
26. 删除有序数组中的重复项
class Solution {
public int removeDuplicates(int[] nums) {
if(nums.length<=1)
return nums.length;
// [0,pre[ 为原数组[0,cur]删除后最终的结果,即[0,pre[满足题目数组中每一个元素只出现1次的要求。
// 每次待检查的部分为[cur,最后]
int pre=1,cur=1;
while(cur<nums.length){
if(nums[cur]!=nums[pre-1]){
nums[pre] = nums[cur];
pre++;
}
cur++; // 如果相等就往后移动,找到第一个不同的元素或者走到底;不相等因为pre已经复制了cur的内容了,所以cur也要++
}
return pre;
}
}
82. 删除排序数组中的重复项 II
class Solution {
public int removeDuplicates(int[] nums) {
if(nums.length<=2)
return nums.length;
int pre = 2 , cur = 2;
while(cur<nums.length){
// 如果不相同的话nums[pre-2]与nums[pre]一定不同,所以nums[pre]一样的元素最多有两个nums[pre]和nums[pre-1]
if(nums[cur]!=nums[pre-2]){
nums[pre] = nums[cur];
pre++;
}
cur++;
}
return pre;
}
}