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

代码随想录一刷记录Day1—— leetcode704. 二分查找 leetcode27. 移除元素 leetcode977.有序数组的平方

前言

之前就有刷代码随想录,但奈何总是三天打鱼两天晒网,而且刷的也很囫囵吞枣,于是乎决定参加代码随想录训练营,准备精刷一遍,希望自己能坚持下去,结营后自己的算法水平能更上一个level,冲ing!

leetcode704. 二分查找

题目链接leetcode704. 二分查找

思路

题目中明确说明给定的数组是有序数组且无重复元素,此时可以想到使用二分查找。
这也是使用二分查找的前提,因为有重复元素的话使用二分查找返回的下标不唯一。

使用二分查找时,要注意边界的界定,保持循环不变量原则,即在while循环中每一次边界的处理都要根据区间的定义来写,例如本题中while(left <= right) 和 while(left < right)在处理 更新右区间的位置完全是两码事

此外还要注意在代码中获取中间值下标,要写成middle = left + (right - left)/2; 以 防止溢出,作用等同于(left + right)/2

代码

//针对左闭右闭区间classSolution{public:intsearch(vector<int>&nums,inttarget){intleft=0;intright=nums.size()-1;while(left<=right){intmiddle=left+(right-left)/2;// 防止溢出 等同于(left + right)/2if(target>nums[middle]){left=middle+1;}elseif(target<nums[middle]){right=middle-1;}else{returnmiddle;}}return-1;}};
//针对左闭右开区间classSolution{public:intsearch(vector<int>&nums,inttarget){intleft=0;intright=nums.size();while(left<right){intmiddle=left+(right-left)/2;// 防止溢出 等同于(left + right)/2if(target>nums[middle]){left=middle+1;}elseif(target<nums[middle]){right=middle;}else{returnmiddle;}}return-1;}};

leetcode27. 移除元素

题目链接leetcode27. 移除元素

思路

本题一种是暴力法,一种是经典的双指针法(快慢指针)

快慢指针核心是要搞清快慢指针分别代表的含义!
快指针:寻找新数组的元素 (删除目标元素后)
慢指针:指向更新(新数组下标的位置),所以本题代码中慢指针的值就是最终要的返回值

注意:使用暴力法在删除某元素后,对该元素后面的元素整体前移时,数组访问不要越界
我第一次写成了如下,导致了越界访问错误(当 j 循环到最后一个有效索引(即 len-1)时,nums[j+1] 变成了 nums[len],这已经超出了向量的末尾)

if(nums[i]==val){for(intj=i;j<len;j++){//如果下面不变的话可以写成 j < len -1nums[j]=nums[j+1];}}

代码

//方法一:暴力法classSolution{public:intremoveElement(vector<int>&nums,intval){intsize=nums.size();for(inti=0;i<size;i++){if(nums[i]==val){for(intj=i+1;j<size;j++){nums[j-1]=nums[j];}i--;// 因为下标i以后的数值都向前移动了一位,所以i也向前移动一位size--;// 此时数组的大小-1}}returnsize;}};
//方法二:快慢指针法classSolution{public:intremoveElement(vector<int>&nums,intval){intlen=nums.size();intslow=0;for(intfast=0;fast<len;fast++){if(nums[fast]!=val){nums[slow++]=nums[fast];}}returnslow;}};

leetcode977.有序数组的平方

题目链接leetcode977.有序数组的平方

思路

其实这道题能想到数组内元素平方后最大值一定位于数组左右最两侧,就好解了,使用双指针法。

代码

classSolution{public:vector<int>sortedSquares(vector<int>&nums){intlen=nums.size()-1;vector<int>result(nums.size(),0);for(inti=0,j=nums.size()-1;i<=j;){if(nums[i]*nums[i]>nums[j]*nums[j]){result[len--]=nums[i]*nums[i];i++;}else{result[len--]=nums[j]*nums[j];j--;}}returnresult;}};
http://www.jsqmd.com/news/511243/

相关文章:

  • EasyCVR视频届的万能接口
  • Fun-ASR-MLT-Nano实战:搭建支持31种语言的语音识别服务
  • java微信小程序的外卖点餐点单系统 商家协同过滤
  • VOOHU 沃虎电子 SFP28 高速连接器 WHSFP32221F013 集成导光柱与散热孔 满足25G数据中心高密度应用
  • 提升自控力差孩子的学习生活:有效的学习障碍帮助与冲动控制训练方法
  • 2026年3月,评测精选皮带导轨厂家,导轨品牌分析深度剖析助力明智之选 - 品牌推荐师
  • 嵌入式C代码安全防线如何崩塌?静态分析7大盲区正在 silently 毁掉你的量产固件
  • 网络安全之linux2
  • LightOnOCR-2-1B多语种OCR落地:国际NGO多语言援助文件OCR+机器翻译流水线
  • 互联网是从0到1,AI是1到无穷大
  • Python基础学习(3)——容器数据类型
  • MGeo门址模型部署教程:阿里云ACK集群中MGeo服务CI/CD自动化发布流程
  • 长沙有没有能解决频繁染发问题且提供贴心售后的男士补发实体店 - myqiye
  • Dify多智能体工作流实战手册:从零搭建高可用协同架构,7天上线金融级审批Agent集群
  • 5分钟快速上手:终极免费生态系统模拟器Ecosim完整指南
  • 小白也能懂:LingBot-Depth模型卡解读,快速上手单目深度估计
  • 讲讲山西靠谱的防腐实验室工作台品牌有哪些 - 工业推荐榜
  • 配电网有功电压控制:多智能体强化学习的奇妙之旅
  • Luos串行网络协议:嵌入式微服务的确定性串行总线实现
  • Anaconda环境管理:为BERT文本分割模型创建独立的Python开发环境
  • 【Dify企业级私有化部署权威指南】:2026年GPU资源优化率提升37%的5大架构跃迁实践
  • 使用LaTeX撰写MogFace-large模型技术报告与论文
  • L298N电机驱动模块原理与HC32F4A0嵌入式移植实践
  • 诡异代码
  • gazebo 中通过sac 训练机械臂进行轨迹规划
  • Pixel Dimension Fissioner多场景落地:医疗问诊记录→患者教育材料生成
  • 2024年MCM/ICM竞赛必备:从零开始搭建数学建模论文写作环境(含LaTeX配置指南)
  • TypeScript知识点汇总
  • PyTorch 2.5新手教程:镜像快速部署+基础操作详解
  • 三菱PLC包装机自动化程序详解:从PLC伺服控制到昆仑通态触摸屏功能扩展