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

代码随想录算法训练营第一天 | Leetcode 704.二分查找 | Leetcode 27.移除元素 | Leetcode 977.有序数组的平方 (c#和c++双语)

704.二分查找

  • 力扣题目链接:704. 二分查找 - 力扣(LeetCode)

  • 文档讲解:704. 二分查找 | 二分查找 | 有序数组 | 循环不变量 | 代码随想录

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

  • 状态:完成


思路:题目中“有序的升序数组”、“O(log n)时间复杂度”摆明使用二分法做此题。

第一种写法,范围左闭右开即[left ,right)

//C#publicclassSolution{publicintSearch(int[]nums,inttarget){//左闭右开intright=nums.Length;intleft=0;while(right>left){intmid=(right+left)/2;if(nums[mid]==target){returnmid;}elseif(nums[mid]<target){left=mid+1;}else{right=mid;}}return-1;}}
//cppclassSolution{public:intsearch(vector<int>&nums,inttarget){intleftindex=0;intrightindex=nums.size()-1;//左闭右闭的区间while(rightindex>=leftindex){intmid=(rightindex+leftindex)/2;if(nums[mid]==target){returnmid;}if(nums[mid]<target){leftindex=mid+1;}else{rightindex=mid-1;}}return-1;}};

第二种写法,范围左闭右闭即[left ,right]

//C#publicclassSolution{publicintSearch(int[]nums,inttarget){//左闭右开intright=nums.Length-1;intleft=0;while(right>=left){intmid=(right+left)/2;if(nums[mid]==target){returnmid;}elseif(nums[mid]<target){left=mid+1;}else{right=mid-1;}}return-1;}}
//cppclassSolution{public:intsearch(vector<int>&nums,inttarget){intleftindex=0;intrightindex=nums.size();//左闭右闭的区间while(rightindex>leftindex){intmid=(rightindex+leftindex)/2;if(nums[mid]==target){returnmid;}if(nums[mid]<target){leftindex=mid+1;}else{rightindex=mid;}}return-1;}};

注意right的赋值,循环终止条件的不同

27.移除元素

  • 力扣题目链接:27. 移除元素 - 力扣(LeetCode)

  • 文档讲解:27. 移除元素 | 双指针法 | 原地覆盖 | 代码随想录

  • 视频讲解:数组中移除元素并不容易! | LeetCode:27. 移除元素_哔哩哔哩_bilibili

  • 状态:完成


暴力解法:

思路:看到“原地”、把值等于val的元素移到数组最后,设想了用冒泡排序改条件来实现

//C#publicclassSolution{publicintRemoveElement(int[]nums,intval){intl=nums.Length;inttemp;for(inti=0;i<l-1;i++){//要循环l - 1次for(intj=0;j<l-i-1;j++)//等价于这个数大(要后移)if(nums[j]==val){temp=nums[j];nums[j]=nums[j+1];nums[j+1]=temp;}}intcount=0;while(count<l){if(nums[count]==val){returncount;}count++;}returnl;}}

分析:时间复杂度O(n2),空间复杂度O(1)

双指针(快慢指针)法:

思路:用快指针剔除值等于val的元素,在原数组上覆写

//C#publicclassSolution{publicintRemoveElement(int[]nums,intval){//双指针法intslowindex=0;intfastindex=0;intl=nums.Length;while(fastindex<l){if(nums[fastindex]!=val){nums[slowindex++]=nums[fastindex];}fastindex++;}returnslowindex;}}
//cppclassSolution{public:intremoveElement(vector<int>&nums,intval){intslowindex=0;intfastindex=0;intl=nums.size();while(fastindex<l){if(nums[fastindex]!=val){nums[slowindex++]=nums[fastindex];}fastindex++;}returnslowindex;}};

分析:时间复杂度O(n),空间复杂度O(1)

(这一遍写的好顺=D)

977.有序数组的平方:

  • 力扣题目链接:977. 有序数组的平方 - 力扣(LeetCode)

  • 文档讲解:977.有序数组的平方 | 双指针 | 有序数组 | 平方排序 | 代码随想录

  • 视频讲解:双指针法经典题目 | LeetCode:977.有序数组的平方_哔哩哔哩_bilibili

  • 状态:完成


思路:用双指针从两端向绝对值为0的中间逼近,按大小写到新的数组里

//C#publicclassSolution{publicint[]SortedSquares(int[]nums){int[]ans=newint[nums.Length];intrightindex=nums.Length-1;intleftintdex=0;intnowindex=nums.Length-1;while(leftintdex<=rightindex){//以绝对值大小为基准决定逼近if(Math.Abs(nums[leftintdex])<=nums[rightindex]){ans[nowindex--]=(int)Math.Pow(nums[rightindex--],2);}elseif(Math.Abs(nums[leftintdex])>nums[rightindex]){ans[nowindex--]=(int)Math.Pow(nums[leftintdex++],2);}}returnans;}}
//cppclassSolution{public:vector<int>sortedSquares(vector<int>&nums){intleftindex=0;intrightindex=nums.size()-1;vector<int>ans(nums.size());intnowindex=nums.size()-1;while(nowindex>=0){if(abs(nums[leftindex])<nums[rightindex]){ans[nowindex--]=pow(nums[rightindex--],2);}else{ans[nowindex--]=pow(nums[leftindex++],2);}}returnans;}};

分析:时间复杂度O(n),空间复杂度O(n)


http://www.cnnetsun.cn/news/1675362.html

相关文章:

  • MySql(简单处理查询结果--查询结果去重)
  • Vue指令对决:v-if vs v-for|谁才是真正的“渲染之王”?
  • 3步打造浏览器二维码工作站:Chrome QRCode重新定义信息交互方式
  • Agent在非结构化数据处理方面表现最好的工具是哪个?实在Agent商业案例库深度解析
  • C++如何将std--vector写入YAML文件_Emitter直接输入容器用法【实战】
  • 前端实现支付宝沙箱的一种方案
  • 2026届学术党必备的五大AI科研平台横评
  • OpenCV 颜色空间(RGB/BGR/HSV)超详细用法教程
  • HPE OneView 11.1 - HPE 服务器、存储和网络设备集中管理软件
  • PyCINRAD气象雷达数据处理解决方案:从数据解码到专业可视化的完整技术实现
  • 从GPT-3到ChatGPT:少样本学习的演进之路,给开发者的启示与避坑指南
  • 5大维度重构华硕笔记本控制体验:写给硬件爱好者的GHelper实战指南
  • TEKLauncher:重新定义方舟生存进化游戏管理的智能解决方案
  • CentOS7服务器流量飙升?别慌,用iftop+nload五分钟定位‘吃流量’的进程
  • VueRouter实战:从‘我的音乐’到‘朋友’页面,手把手教你处理组件命名和路由规划的那些坑
  • Trae国内版初体验:用豆包大模型写Python爬虫,比Copilot香吗?
  • Emby高级功能完全解锁指南:emby-unlocked让媒体服务器焕发新生
  • 效率提升:告别卡顿,用快马生成win11右键菜单高效定制工具
  • 5个秘诀让你轻松玩转QtScrcpy:安卓投屏控制从入门到精通
  • __slots__
  • JPEGView:让专业图像处理不再受限于设备与技术门槛
  • C++ 契约编程(Contracts):利用 C++20/23 语法在函数接口强制定义不变式(Invariants)以增强软件鲁棒性
  • 外卖 CPS 佣金结算系统:Java 分布式事务处理与数据一致性保障
  • javaweb在线考试管理系统的设计与实现前台329fgzk
  • 从uboot到内核启动:深度解析【system halted】与解压失败的典型场景
  • 创业公司vs大厂:不同阶段的职业选择逻辑
  • 突破MRI仿真壁垒:开源平台的技术革新与应用指南
  • Qwen3.5-2B部署优化教程:显存占用压至3.2GB的GPU算力适配技巧
  • Python 3.15 新突破:frozendict 带来字典应用新可能
  • [CD33(Siglec-3)] 靶点技术深度解析:免疫抑制机制、ADC药物开发与临床转化