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

代码随想录打卡第一天

文章讲解:代码随想录

视频讲解:手把手带你撕出正确的二分法 | 二分查找法 | 二分搜索法 | LeetCode:704. 二分查找_哔哩哔哩_bilibili

class Solution {
public:int search(vector<int>& nums, int target) {int left=0;//左边界int right=nums.size()-1;//右边界while(left<=right){int middle=(left+right)/2;if(nums[middle]<target){left=middle+1;}else if(nums[middle]>target){right=middle-1;}else{return middle;}}return -1;}

注意二分查找应用的条件 单调或者局部单调的数据或者别的数据结构。二分法要定义区间的左边界和有边界。并且根据区间的左右边界的开闭设计的算法也不同。

题目是单调递增的数据。解法注意是当中间节点不符合目标时,要更新查找区间。首先while()循环,既然left<=right;可以取等号,那么一定是左闭右闭的区间。接下来找到中间节点,当中间结点小于目标时,证明目标节点在右侧,此时要更新左边界,left=middld+1是因为nums[middle]已经查找过middle结点了,所以跳过他;当中间节点大于目标时,证明目标在左侧,此时要更新右边界,为什么是right=middle-1;同样的,首先是因为已经查找过这个middle节点,不需要再查一遍了,并且因为是右闭的区间。

左闭右开的解法

public:int search(vector<int>& nums, int target) {int left=0;//左边界int right=nums.size();//右边界while(left<right){int middle=(left+right)/2;if(nums[middle]<target){left=middle+1;}else if(nums[middle]>target){right=middle;}else{return middle;}}return -1;}
};

【经典排序算法】二分查找法 (动图演示 + C 语言代码实现)_二分查找动图-CSDN博客

双指针法

class Solution {
public:int removeElement(vector<int>& nums, int val) {int slow=0;//慢指针//int fast=0;//快指针for(int fast=0;fast<nums.size();fast++){if(nums[fast]!=val){nums[slow]=nums[fast];slow++;}else{continue;}}return slow;}
};

 暴力解法就是两次for循环。双指针法就是用一次就行了。

  • 快指针:寻找新数组的元素 ,新数组就是不含有目标元素的数组
  • 慢指针:指向更新 新数组下标的位置

首先如果nums[fast]!=val,原地更新,比如所有的元素中都没有我们要找的,那么遍历一遍之后数组还原来的数据。

如果nums[fast]==val,证明找到了我们想要的元素,那么此时slow和fast指向的都是这个想要替代的元素,那么slow不变,fast继续+1,继续寻找下一个我们不想替换的元素,如果找到不是我们想要的元素,那么就让slow索引下的元素等于fast索引下的元素,也就是用后面不是想要替代的元素去替代我们想要替代的元素。

最后fast遍历完一次,slow就是剩下的元素个数。

依照此法已经解决的题目
26. 删除有序数组中的重复项 - 力扣(LeetCode)

http://www.lqws.cn/news/567235.html

相关文章:

  • C语言中常见字符串处理函数
  • 量子算法入门——5.Qiskit库介绍与简单应用(2)
  • Ubuntu服务器(公网)- Ubuntu客户端(内网)的FRP内网穿透配置教程
  • 博图SCL编程利器:CASE OF 语句详解与应用指南之设备运行模式选择框架
  • 领域驱动设计(DDD)【28】之实践或推广DDD的学习
  • docker compose基本使用以及示例
  • 基于springboot+vue的数字科技风险报告管理系统
  • URL带有中文会引入哪些问题
  • http相关网络问题面试怎么答
  • 算法-基础算法-递归算法(Python)
  • 第十二节:Vben Admin 最新 v5.0 (vben5) 快速入门 - 两种权限控制方式(附前后端代码)
  • Vue 3 Teleport 特性
  • DXYZ投资-ai公司
  • 左神算法之Zigzag方式打印矩阵
  • Java面试题031:一文深入了解MySQL(3)
  • Vivado关联Vscode
  • Rust标量、复合类型与自定义类型、第三方并发结构
  • 【软考--软件设计师】2025-05 我的选择题错题总结
  • ListExtension 扩展方法增加 转DataTable()方法
  • 商业行业项目创业计划书PPT模版
  • 什么是区块链的跨链操作?
  • 穿越时空的光
  • 详解快速排序
  • SRS流媒体服务器(8)源码分析之rtc/rtmp互相转码详解
  • 数据可视化 - 单子图
  • 第10章 数组和指针
  • 左神算法之螺旋打印
  • SQL Server从入门到项目实践(超值版)读书笔记 19
  • 从GPTs到Real智能体:目前常见的几种创建智能体方式
  • spring:BeanPostProcessor后置处理器介绍