今天的题仍然是考察数组操作的简单题目,在这个题里用到了快慢指针的这样一个思想,通过双指针实现对原数组的修改以及对数组长度的确定。另外可以感觉到自己在做题的过程中不再像最开始那样怕难,怕麻烦了,并且在有多种情况的需要考虑的时候也可以想到,这算是一些进步吧。
解题思路:
思路是这样的,首先让慢指针指向第一个元素,快指针指向第二个,当然这里是把只有一个元素与两个元素的情况讨论出来了,在考虑其他情况,当第一个和第二个元素相等的时候,那就让快指针来确定有几个连续的相同的数字,相同就让快指针向后走一位,直到不相同了,就将这个数字放到慢指针的后一位,并且慢指针的位置也向后移动一位。这就是一个循环的过程,不断递进就可以了。
代码(Java):
class Solution {
public int removeDuplicates(int[] nums) {
int slow=0;
int fast=1;
if(nums.length==1){
return 1;
}
if(nums.length==2){
if(nums[slow]==nums[fast]){
return 1;
}else{
return 2;
}
}
while(fast<nums.length){
if(nums[slow]==nums[fast]){
fast++;
}else{
slow++;
nums[slow]=nums[fast];
fast++;
}
}
return slow+1;
}
}