当前位置: 首页 > article >正文

LeetCode27移除元素

在这里插入图片描述

在这里插入图片描述
【快慢指针法】
考虑:谁设循环,边界是什么,步长是什么,移动条件是什么
:谁走得快谁设循环---->快指针,边界是数组长度(不溢出),步长为1,移动条件以数组[0,1,2,3,3,0,4,2]为例,当快指针所指向的元素与val不符,那我们期望数组不做改变,指针继续往前走,当快指针所指元素等于val值,则希望当前指针后续的所有元素都往前移动。此时,如果考虑当nums[fast]==val作为条件对数组进行改动的话,比如当fast=2,nums[fast]val2,让low指针指向当前位置,fast不断后移把元素往前搬,这就会退化成双重循环的暴力解法,与我们想要的效果不符,所以需要考虑另一种条件:当快指针所指元素与val不符时,数组做出改变
这样循环会有两种情况出现:
①nums[fast]==val
此时此刻low指针会与fast指针同在,因为没遇到val,low指针不语只是一味地跟随,那么当遇到了val,fast指针需要找到下一个不是val的元素把当前val覆盖掉,也就只需要fast循环,当出现!=val的情况,则会覆盖掉
②nums[fast]!=val
我们希望数组不发生改变,也就是元素不移动,那么可以原地交换,nums[low++]=nums[fast],慢指针仅仅跟随快指针

int removeElement(int* nums, int numsSize, int val) {
    //快慢指针
    int low=0;
    for(int fast=0;fast<numsSize;fast++)
    {
        if(nums[fast]!=val)
        {
            nums[low++]=nums[fast];
        }
    }
    return low;
}

http://www.kler.cn/a/585056.html

相关文章:

  • 学习路之TP6 --定制workman命令
  • Java×c艹py
  • SpringBoot 根据配置前缀绑定配置:@ConfigurationProperties
  • Python学习第十三天
  • 第三百七十五节 JavaFX教程 - JavaFX表视图
  • 【氮化镓】开态GaN HEMTs中氧诱导Vth漂移的缺陷演化
  • 【Go学习】04-4-Gorm框架-增删改查事务钩子
  • Redis 源码分析-内部数据结构 ziplist
  • React hook钩子性能优化Hooks的面试常考题目
  • SQL29 计算用户的平均次日留存率
  • 前端面试:React hooks 调用是可以写在 if 语句里面吗?
  • 2025-03-13 学习记录--C/C++-PTA 练习2-9 整数四则运算
  • 十五、Vue 与 Webpack 5:优化构建性能的实用技巧
  • 【Android】Android 悬浮窗开发 ( 动态权限请求 | 前台服务和通知 | 悬浮窗创建 )
  • Maple网络浮动版安装|添加新版本授权到已有授权服务器
  • VMware虚拟机网络连接模式介绍以及nat模式访问公网实践
  • css实现标题跑马灯效果
  • 区块链实战:手把手教你搭建私有链网络
  • 【HarmonyOS Next】鸿蒙应用常规面试题和答辩思路参考
  • kotlin中的行为组件