针对一些要求in-place的问题,使用双指针法可有效的解决。
1.数组
- 在空间复杂度为O(1)的情况下,移除数组中的元素
int removeElement(int* nums, int numsSize, int val){
int i=0;
if(numsSize==0)
return 0;
for(int j=0;j<numsSize;j++){
if(nums[j]!=val){
nums[i++]=nums[j];
}
}
return i;
}
- 在空间复杂度为O(1)的情况下,去重已排序的数组
int removeDuplicates(int* nums, int numsSize){
int i=0;
if(numsSize==0)
return 0;
for(int j=1;j<numsSize;j++){
if(nums[j]!=nums[i]){
nums[++i]=nums[j];
}
}
return i+1;
}