解题思路
什么快慢指针,还是有点蒙圈
代码 C
int removeDuplicates(int* nums, int numsSize){
//考虑边界情况1 数组为空时
if(numsSize==0)
return 0;
//考虑边界情况2 数组只有一个元素时
if(numsSize==1)
return 1;
//考虑边界情况3 数组有只两个元素时
if(numsSize==2){
if(nums[0]!=nums[1])
return 2;
else
return 1;
}
int lowIndex=0; //满指针从第一个开始
int fastIndex=1; //快指针从第二个开始寻找
for(fastIndex;fastIndex<numsSize;fastIndex++){ //当快指针不越界时
if(nums[fastIndex] != nums[lowIndex]){ //如果快指针找到了不等于满指针的数
nums[++lowIndex] = nums[fastIndex]; //就将找到的数赋值给慢指针的下一个数
}
}
return lowIndex+1; //慢指针所指的位置即为数组最后一个元素,+1以后便是所求数组大小
}
代码 Java
class Solution {
//删除已排序数组中重复的元素
//只要后面的元素不一样,就可以拿来从头接起
public int removeDuplicates(int[] nums) {
//给定的数组长度
int len=nums.length;
//两个指针
int a,b;
a=0;//指针起始0
b=1;//指针起始1
//当后面的指针不越界时
while(b<len){
//比较,找到不同的数(b所在)拿来放在a的后一个位置
if(nums[a]!=nums[b]){
a++;
nums[a]=nums[b];
}else{//否则就是相同的,此时a不动,b++,总长度--
b++;
}
}//最后输出的长度就是a所在的下标后移一个
return ++a;
}
}