删除有序数组中的重复项:
给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 最多出现两次 ,返回删除后数组的新长度。
不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。
个人思路:
定义一个尾下标 tail;
定义一个数num表示重复的最后那个数;
定义一个数flagNum来判断重复了几次;
定义一个数length最后输出结果。
对数组进行循环操作;
重复次数大于2的不进行任何操做;
重复次数小于3的就把当前循环的数赋给尾下标所在的位置;
循环的时候发现相同,flagNum就加一,
发现不同,flagNum就变成一。
class Solution {
public int removeDuplicates(int[] nums) {
int length = 0;
int tail = 0;
int flagNum = 0;
int num = nums[0] - 1;
for(int i = 0; i < nums.length; i++){
if(nums[i] == num){
flagNum++;
}else{
flagNum = 1;
num = nums[i];
}
if(flagNum < 3){
nums[tail] = nums[i];
tail++;
length++;
}
}
return length;
}
}
个人思路二: 前两项直接保留,和 tail - 2 项不同的的被保留,不同的继续往下。
class Solution {
public int removeDuplicates(int[] nums) {
int length = 0;
int tail = 0;
for(int i : nums ){
if((tail < 2)||(i != nums[tail - 2])){
nums[tail++] = i;
length++;
}
}
return length;
}
}