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

leetcode-01-[704]二分查找[27]移除元素

一、[704]二分查找

//二分法:有序 //[left,right] 故判定条件为left <= right,等于此时有意义; //缩小范围 left=mid+1; //right= nums.length-1; //不要忘了修改mid 的值 class Solution { public int search(int[] nums, int target) { int left=0; int right= nums.length-1; int mid=(right+left)/2; while(left<=right) { if(nums[mid]>target){ right=mid-1; } else if (nums[mid]<target) { left=mid+1; }else{ return mid; } mid=(right+left)/2;//不要忘了修改mid 的值 } return -1; } }

一些注意事项

1、核心思想:排除不符合条件的区间

2、区间

普通查找:左闭右闭区间

找边界:左闭右开区间

3、普通二分查找

可以理解为找>=target的第一个元素,left的含义为第一个满足条件的元素,right为最后一个不满足条件的元素

4、找边界

left=mid+1;

right=mid 或mid-1 ,主要看此时mid是不是候选值,虽然mid在上一轮已经检查过,但也可能满足条件(特殊的,左闭右开区间,right=mid,因为此时是开区间,mid已排除;反之若right=mid-1,则排除了mid-1这个元素)

二、[27]移除元素

1、对撞指针

改变了元素的相对顺序

class Solution { public int removeElement(int[] nums, int val) { int left=0,right= nums.length-1; while(left<=right) { if(nums[left]!=val&&nums[right]==val) { left++; right--; }else if(nums[left]!=val&&nums[right]!=val){ left++; } else if (nums[left]==val&&nums[right]==val) { right--; } else if (nums[left]==val&&nums[right]!=val) { int tmp=nums[left]; nums[left]=nums[right]; nums[right]=tmp; left++; right--; } } return left; } }

2、对撞指针代码优化

class Solution { public int removeElement(int[] nums, int val) { int left = 0; int right = nums.length - 1; while (left <= right) { if (nums[left] != val) { left++; } else if (nums[right] == val) { right--; } else { nums[left] = nums[right]; right--; } } return left; } }

3、快慢指针(推荐)

没有改变元素的相对顺序

//快指针:找到与目标值不相同的值,将其传给慢指针 //慢指针:接收快指针的值 class Solution { public int removeElement(int[] nums, int val) { // 快慢指针 int slowIndex = 0; for (int fastIndex = 0; fastIndex < nums.length; fastIndex++) { if (nums[fastIndex] != val) { nums[slowIndex] = nums[fastIndex]; slowIndex++; } } return slowIndex; } }
http://www.jsqmd.com/news/1349027/

相关文章:

  • 不平衡学习神器SMOTE-variants:10个实用技巧提升分类模型性能
  • 金华市婺城区GEO城市合伙人选型推荐哪家靠谱:源头厂商、合伙人权益与分润模式一次看清 - 科技快讯
  • 探索SerenityOS:从复古美学到现代操作系统的完整实践指南
  • 石家庄本地电工上门报价明细,维修避坑指南完整版 - 精彩城市
  • AutowareArchitectureProposal完全指南:自动驾驶软件架构探索与实践
  • 通达信缠论插件ChanlunX:3步实现缠论分析自动化,告别手动画线烦恼
  • 如何用Sultan快速上手命令行编程?5分钟入门教程
  • WinDiskWriter:让Mac用户告别Windows启动盘制作难题的终极指南
  • OrcaSlicer性能调优实战:从150mm/s到300mm/s的速度突破指南
  • Investbrain多币种支持详解:轻松管理全球投资组合
  • JS基础以及与Java区别学习笔记
  • 深入理解hd-idle日志:如何通过日志优化硬盘休眠策略
  • 宣城装修公司业主评价比较好?真实业主反馈拆解 - GrowthUME
  • Table Transformer实战指南:基于DETR的文档表格提取深度解析
  • G-Helper终极指南:华硕笔记本性能控制的轻量化革命
  • ADR微服务安全:保护分布式AI代理架构的终极指南
  • 告别复杂配置!kubeadm-ha使用Ansible实现Kubernetes自动化安装的完整教程
  • 揭秘自动驾驶制动系统:automated-driving-control校准方案
  • 如何用AI图像扩展工具从单张照片构建完整游戏美术资源
  • Image Extender:5大智能创作模式,一键扩展图像与生成2D游戏美术资源
  • 终极指南:aspire-biencoder-biomed-spec如何彻底改变生物医学文献相似度计算
  • 2026年南充广告设计制作安装|华蔓广告|警示标识,围挡,展架等标识制作一站式服务厂家 - 四川华蔓广告有限公司
  • 从入门到精通:keyring-rs示例程序带你玩转跨平台密钥管理
  • Java3 - 运算符
  • 开启宝塔Nginx防火墙支付返回失败解决方法
  • ViMax:智能体协同的视频创作革命
  • 为什么选择QRibbon?Qt Ribbon菜单栏实现方案对比与选型指南
  • 3步彻底告别Microsoft Edge:EdgeRemover让你完全掌控Windows浏览器
  • 2026年收纳五金品牌哪家** 揭阳市尊越精密制造 - 奔跑123
  • rpy2与Jupyter集成:交互式数据分析环境搭建与应用