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

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;
}

相关文章:

  • Android12 使用自定义签名key替换系统默认testkey
  • 上下分层、左右分离的驱动设计思想
  • PMP–知识卡片--情商组成部分
  • java 手搓一个http工具类请求传body
  • Three.js中BufferGeometry 和 BoxGeometry
  • 网络变压器的主要电性参数与测试方法(4)
  • Jetpack Navigation 实战:Fragment 和 Activity 的交互与导航
  • Android Glide 缓存模块源码深度解析
  • SpringBoot缓存抽象:@Cacheable与缓存管理器配置
  • Vite项目中vite.config.js中为什么只能使用process.env,无法使用import.meta.env?
  • SpringCloud Alibaba——入门简介
  • 利用ArcGIS Pro进行爆炸波及建筑分析:详细步骤与技巧
  • 鸿蒙模拟器运行NDK项目失败 9568347
  • 【ai塔罗牌-生命之树】【azure openai】【python】交互塔罗牌demo
  • 【大模型系列】llama.cpp本地运行大模型
  • [排序算法]直接插入排序
  • 数据采集技术之python网络爬虫(中国天气网的爬取)
  • 动态规划(1. 第 N 个泰波那契数)
  • 【prompt实战】知乎问题解答专家
  • Mac java全栈开发环境配置
  • 问责!美国海军对“杜鲁门”号航母一系列事故展开调查
  • 国新办将就2025年4月份国民经济运行情况举行新闻发布会
  • 4月企业新发放贷款利率处于历史低位
  • 加拿大新政府宣誓就职
  • 融创中国:境外债务重组计划聆讯定于9月15日召开
  • 牧原股份子公司与养殖户种猪买卖纠纷案一审胜诉