当前位置: 首页 > 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.jsqmd.com/news/582626/

相关文章:

  • 履约门槛再次大修!TikTok美区全面强制官方物流后,卖家该怎样守住前台账号的安全底线?
  • 露营烧烤喝什么精酿比较潮?歪马送酒大额券帮你省出潮饮预算 - 资讯焦点
  • AI辅助开发:让快马AI理解并生成ccswitch工具的核心逻辑与UI管理代码
  • AgentCPM-Report高效部署教程:GPU显存优化+流式输出配置详解
  • async/await:异步编程的“读心术”|从原理到避坑,一篇吃透!
  • 追剧想喝点酒外卖哪里买方便?歪马送酒大额券解锁便捷微醺 - 资讯焦点
  • 解决FTPS连接问题:从握手失败到成功连接的实战
  • 《Docker 部署 Elasticsearch + Kibana:搭建自己的日志搜索平台》
  • 117. 如何在Rancher监控中测试 AlertManager
  • GitHub 学生认证须知
  • 学会OpenClaw后,我的摸鱼时间又变长了
  • 如何通过LAV Filters解决媒体播放难题?开源解码工具完整优化指南
  • STM32H723ZGT6 与 STM32F103RCT6 硬核对比,从参数到实战的全维度精准解析
  • 2026最新户外文旅灯光设计厂家推荐!权威榜单发布,品质服务双优 - 十大品牌榜
  • LFM2.5-1.2B-Thinking-GGUF版本管理与协作:GitHub工作流中的AI助手
  • 苏州日料哪家优惠力度大?火地铁板烧口令解锁隐藏福利,性价比碾压同档门店 - 资讯焦点
  • 为什么 ABAP 开发团队现在要认真看待 AI 这项能力
  • Ruby短信营销接口示例代码:Ruby开发环境下营销短信API接口的集成与Demo演示
  • 《从Claude Code泄露源码看工程架构:导读》
  • pre-pre-training的规则系统有哪些
  • 分子动力学自由能计算实战指南:从理论到实践掌握gmx_MMPBSA
  • 腾讯云摆摊、淘宝卖20万:OpenClaw掀起的自动化风暴,到底是什么?
  • BEVFormer论文复现
  • 118. 从 RKE1(Docker)迁移到 RKE2(容器化)后,JSON 日志未能正确解析
  • STM32 HAL驱动SSD1306 OLED显示库(C++/I²C/128×64)
  • Qwen1.5-1.8B GPTQ企业级部署指南:内网穿透与安全访问配置
  • Shell短信营销接口示例代码:利用Curl指令在Linux环境下快速调用营销短信API
  • OpenCV 颜色空间(RGB/BGR/HSV)超详细用法教程
  • IP归属地查询在互联网业务中能解决什么问题?3个真实场景+查询工具落地实操
  • 图像降噪太慢?用积分图像把Python版Non-Local Means速度提升10倍以上