移除元素(C语言)———顺序表经典算法题

目录

快慢指针法

题目描述. - 力扣(LeetCode):

答案展示:

题目讲解:

思路简析:

过程讲解:

题目反思 :


快慢指针法

题目描述. - 力扣(LeetCode)

答案展示:

int removeElement(int* nums, int numsSize, int val) {
    int src ,dst;
    src = dst = 0;
    while(src<numsSize)
    {
        if(nums[src]!=val)
        {
            nums[dst] = nums[src];
            src++;
            dst++;
        }
        else
            src++;
            
    }
    return dst;
}

题目讲解:

思路简析:

本题会出现两种思路:

一,额外定义一个数组。但这是不可行的,题目中“你必须仅使用O(1)额外空间,并原地修改输入数组”,O(1)即空间复杂度是一个常数,这里不影响,重点是需要在原数组上修改。

二,使用快慢指针。

过程讲解:

核心思想就是,将值为val的元素通过一前一后的指针,转移到数组的尾部。代码中dst代表慢指针,src代表快指针,只有两种情况:1,当src指向的值为val时,只有src后移,dst不动   2,当src指向的值不为val时,将该值直接赋到dst中,因为这个值是我们想要的,而后两个指针同时后移。

题目反思 :

解决该题最主要的就是将后面的非val数字提到前面来,将值为val的数字提到数组后面去,而体现在代码上就是借助一快一慢的指针这一双无形的手,其实指针在很多时候其本质作用就是“一双手”,所以想出解决方案重要,能将其抽象成代码更重要。

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值