赞
踩
删除有序数组中的重复项:
给你一个有序数组 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;
}
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。