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

【LeetCode 手撕算法】(技巧)只出现一次的数字、多数元素(摩尔投票法)、颜色分类(三指针荷兰国旗算法)、下一个排列、寻找重复数(快慢指针 Floyd判圈算法)

136-只出现一次的数字思路异或初始为3则变成二进制为011 两个相同的数字异或为0按照题目要求22相同只有一个不同还要取这一个则就用异或4^2^3^2^34class Solution { public int singleNumber(int[] nums) { int result0; for(int num:nums){ result^num; } return result; } }169-多数元素摩尔投票法思路选数量过半的元素采用temp来临时接元素初始判断是否为0并赋值每遍历一个就对比相同就不同就抵消--注意返回值是返回元素不是返回数量class Solution { public int majorityElement(int[] nums) { int temp0; int count0; for(int num:nums){ if(count0){ tempnum; } if(tempnum){count;} else{count--;} } return temp; } }75-颜色分类三指针、荷兰国旗算法思路三指针荷兰国旗算法如果nums[i] 0交换nums[i]和nums[left]lefti如果nums[i] 2交换nums[i]和nums[right]right--注意i 不移动因为换过来的数还没检查如果nums[i] 1i循环条件i rightright 之后都是 2不需要检查注意2时i不需要 因为开始就在左边换左时才加换右时不占位置class Solution { public void sortColors(int[] nums) { int i0; int left0; int rightnums.length-1; while(iright){ if(nums[i]0){ swap(nums,i,left); left; i; }else if(nums[i]2){ swap(nums,i,right); right--; }else{ i; } } } public void swap(int[] nums,int i,int j){ int temp; tempnums[i]; nums[i]nums[j]; nums[j]temp; } }31-下一个排列思路从右向左找到第一个升序对(i, i1)即nums[i] nums[i1]。然后在[i1, 结束]中找到比 nums[i] 大的最小的数交换它们最后将[i1, 结束]反转成升序。步骤从右向左找到第一个i满足nums[i] nums[i1]如果找不到整个数组降序直接反转整个数组从右向左找到第一个j满足nums[j] nums[i]j i交换nums[i]和nums[j]反转[i1, n-1]部分使其升序注意选升序后面比 nums[i] 大的最小的数不需要min之类的因为能找到升序 说明后面都是降序排列则从最右找 第一个就是注意翻转的传参tempi1就行不能在局部取相关i和j 必须用专门的暂存值来取class Solution { public void nextPermutation(int[] nums) { int nnums.length; int tempi-1; int tempj-1; for(int in-2;i0;i--){ //找右边第一个升序 if(nums[i]nums[i1]){ tempii; break; } } if(tempi0){//若升序存在 for(int jn-1;jtempi;j--){ //若升序存在找大于i的里面最小数 if(nums[j]nums[tempi]){//升序部分之后 一定是降序因此从最右边选就行 tempjj; break; } } swap(nums,tempi,tempj); } reverse(nums,tempi1,n-1);//否则翻转tempi之后整个数组 } public void swap(int[] nums,int i, int j){ int temp0; tempnums[i]; nums[i]nums[j]; nums[j]temp; } public void reverse(int[] nums,int i,int j){ while(ij){ swap(nums,i,j); i; j--; } } }287-寻找重复数 快慢指针Floyd 判圈算法思路不用理解直接背将nums[i]看作i → nums[i]的指针因为元素范围[1, n]不会指向0不会出界重复的数意味着有多个索引指向同一个值 → 形成环步骤快慢指针slow nums[0]fast nums[nums[0]]快指针一次走两步第一次相遇检测环slow走一步slow nums[slow]fast走两步fast nums[nums[fast]]相遇时停止找环的入口重复的数slow回到起点slow 0两个指针都每次走一步再次相遇的地方就是重复的数class Solution { public int findDuplicate(int[] nums) { int slownums[0]; int fastnums[nums[0]]; //fast二倍速 while(slow!fast){ //slow和fast相遇则停止 slownums[slow]; fastnums[nums[fast]]; } slow0; //slow回到起点fast还是相遇点 while(slow!fast){//再次相遇就是入口 slownums[slow]; fastnums[fast]; } return slow;//slow和fast都可以 } }
http://www.zskr.cn/news/1340596.html

相关文章:

  • “曲线救国”的代价:先回国进外企(MNC),再谋求 Transfer 出国的可行性分析
  • Python3 字典详解:从入门到精通
  • 抖音批量下载神器:5分钟掌握高效内容采集的终极指南
  • 为Claude Code配置Taotoken作为可靠的后端模型服务
  • 毕业设计定制精选【芳芯科技】多功能脊椎按摩仪
  • 如何学习Three.js
  • 太顶了!输入主题,这几款AI论文软件自动生成毕业论文初稿!
  • 论文降重卡关?Paperxie 用「双 buff 叠加」,把查重和 AIGC 率一起打通关
  • [深度洞察]2026年制造业竞争情报智能化监控的核心发展趋势是什么?详解企业级全链路自动化闭环方案
  • Access to system table ‘mysql.innodb_index_stats‘ is rejected.
  • 小红书营销不止于种草!2026年五大小红书营销公司综合能力白皮书暨推荐榜单 - GEO优化
  • OpenClaw.NET 兼容性目录指南(Compatibility Catalog)
  • AI 智能体开发平台及特点
  • 终极指南:3分钟掌握HTML到Word完美转换,html-to-docx让你的文档格式零损失
  • wingetAn unexpected error occurred while executing the command: 0x8a15005e解决方法
  • 2026 年海南进出口公司注册代办哪家强?全岛服务商排行榜权威发布 - GrowthUME
  • 大模型---Agent的遗忘方式
  • 【Midjourney野兽派风格创作指南】:20年AI视觉专家亲授7大失控美学法则,3天重塑你的提示词直觉
  • HAMi 源码阅读笔记 05:从 PredicateRoute 看 HAMi /filter 的请求处理流程
  • 【2026】ISCC 社团活动统计
  • 2026杭州GEO优化公司权威评测:五大厂商横向对比,避坑选型必读 - qq150194
  • ElevenLabs印尼文语音API调用全链路解析(含ISO 639-1编码陷阱与Javanese语调补偿方案)
  • Unity3d之BIM
  • 2025.12.18海南封关运作后,内地老板为何扎堆来注册公司?2026年海南注册公司代理记账靠谱财税机构排行榜单 - GrowthUME
  • 2026年美容抗衰仪器价格指南:U.SUN时光梭如何实现全民抗衰普及? - GrowthUME
  • 回顾Java知识点,面试题汇总Day10(持续更新)
  • 【原理实战】OpenClaw Memory 系统:从“多记一点“到“治理层“的演进
  • 洛谷-【图论2-3】最小生成树1
  • 《CVPR2025-DEIM创新改进项目实战:从原理到部署的深度学习优化全攻略》020、从原理到部署的深度学习优化全攻略
  • 大型房地产集团战略规划数字化转型PMO项目进度管理解决方案(PPT)