双指针法

针对一些要求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;
}
posted @ 2019-11-23 22:13  hunter-w  阅读(109)  评论(0)    收藏  举报