个人思路:
同Ⅰ,多加一个判断条件:前一个相等前两个不等,且不与i周围元素判断,而是与j元素判断,否则j处赋值之后会影响i处元素的判断。前两个元素必定保留,因此取j=1开始判断。由于要取j=1.因此提前判断numsSize
C
int removeDuplicates(int* nums, int numsSize) {
if(numsSize<2 || numsSize==2){
return numsSize;
}
int i=2,j=1;
for(i;i<numsSize;i++){
if(nums[i]!=nums[j] || (nums[i]==nums[j] && nums[i]!=nums[j-1])){
nums[j+1]=nums[i];
j++;
}
}
return j+1;
}
python
class Solution:
def removeDuplicates(self, nums: List[int]) -> int:
if len(nums)<=2:
return len(nums)
j = 1
for i in range(2, len(nums)):
if nums[i]!=nums[j] or (nums[i]==nums[j] and nums[i]!=nums[j-1]):
nums[j+1] = nums[i]
j+=1
return j+1
java
class Solution {
public int removeDuplicates(int[] nums) {
if(nums.length < 3){
return nums.length;
}
int j=1;
for(int i=2;i<nums.length;i++){
if(nums[i]!=nums[j] || (nums[i]==nums[j] && nums[i]!=nums[j-1])){
nums[j+1]=nums[i];
j++;
}
}
return j+1;
}
}
升级,其实只要判断nums[i]和nums[j-1]即可
C
int removeDuplicates(int* nums, int numsSize) {
if(numsSize<2 || numsSize==2){
return numsSize;
}
int i=2,j=1;
for(i;i<numsSize;i++){
if(nums[i]!=nums[j-1]){
nums[j+1]=nums[i];
j++;
}
}
return j+1;
}