首页/新闻资讯/正文详情

【技巧】【简单/中等】只出现一次的数字/多数元素/颜色分类/下一个排列/寻找重复数

发布时间:2026/9/27 19:46:00 来源:云帆数科 栏目:资讯中心
【技巧】【简单/中等】只出现一次的数字/多数元素/颜色分类/下一个排列/寻找重复数
1.只出现一次的数字原题链接位运算 XOR异或自己和自己异或等于 0。a ^ a 0任何数字和 0 异或等于自己。a ^ 0 a异或满足交换律和结合律。a ^ b b ^ a(a ^ b) ^ c a ^ (b ^ c)例如[4,1,2,1,2]把所有数字异或4 ^ 1 ^ 2 ^ 1 ^ 2 4 ^ (1 ^ 1) ^ (2 ^ 2) 4publicintsingleNumber(int[]nums){intres0;for(intnum:nums){res^num;}returnres;}2.多数元素原题链接摩尔投票算法nums [2,2,1,1,1,2,2] 统计结果2 出现 4 次、1 出现 3 次。不同数字两两抵消2和1 相互抵消最终剩下2维护两个变量candidate // 当前候选数字count // 当前候选数字的票数count 0说明之前的候选人已经被抵消。重新选择当前数字。当前数字等于 candidate 票数增加当前数字不等于 candidate 票数减小。publicintmajorityElement(int[]nums){intcandidate0;intcount0;for(intnum:nums){if(count0){candidatenum;}if(numcandidate){count;}else{count--;}}returncandidate;}3.颜色分类原题链接三指针一次遍历,最终得到的标签范围如下[0, p0)全是0[p0, i)全是1[i, p2]待处理区域(p2, n-1]全是2- p0表示 0 区域的右边界初始为 0 - i当前遍历位置初始为 0 - p2表示 2 区域的左边界初始为 n - 1如果 nums[i] 0和 p0 位置交换p0i如果 nums[i] 1直接 i如果 nums[i] 2和 p2 位置交换p2–注意i 不增加因为从后面换过来的数字还没有检查nums[2,1,2,1,0,0]初始i0、p00,p25nums[0]2,交换nums[0]和nums[5],p2--[0,1,2,1,0,2]nums[0]0,交换nums[0]和nums[0],p0,i[0,1,2,1,0,2]nums[1]1,直接i[0,1,2,1,0,2]nums[2]2,交换nums[2]和nums[4],p2--[0,1,0,1,2,2]nums[2]0,交换nums[0]和nums[1],p0,i[0,0,1,1,2,2]nums[3]1,i[0,0,1,1,2,2]i4p23循环结束publicvoidsortColors(int[]nums){intnnums.length;intp00;// 0 区域右边界inti0;// 当前遍历位置intp2n-1;// 2 区域左边界while(ip2){if(nums[i]0){swap(nums,i,p0);p0;i;}elseif(nums[i]1){i;}else{// nums[i] 2swap(nums,i,p2);p2--;// 这里不能 i因为换过来的元素还没判断}}}privatevoidswap(int[]nums,inti,intj){inttempnums[i];nums[i]nums[j];nums[j]temp;}4.下一个排列原题链接找到字典序中刚好比当前排列大的最小排列[1,2,3]-[1,3,2][1,3,2]-[2,1,3][3,2,1]-[1,2,3]//从右往左看如果数组一直是降序的,例如[3,2,1],没有下一个更大的排列了。所以我们要从右往左找到第一个升序的位置[1,2,3]从右向左寻找最右侧的第一个升序位置比如数组[1,3,2,5,4]需要进行替换的位置是2因为对于2来说它后面有比自己较大的数字应从中选择一个最小的来进行替换剩余的数进行升序排列。如果此时是[1,3,2,4,5]这样第一个升序就是4这个位置寻找到后此时右侧位置上全是逐渐降序的数字列需要找到比 a[i] 大的最小数字然后进行交换交换后右半部分还是递减的然后将右半部分进行翻转从小到大nums[1,3,2,5,4]寻找到最右侧递减的位置为2,i2》寻找要交换的数字位置 所以 i2nums[i]2》寻找交换数字的位置 在 i 后面寻找第一个比 nums[i]大的数字13254↑42所以 j4nums[j]4》交换 nums[i]和 nums[j]13254↘ ↙13452》反转 i 后面的数组[1,3,4,2,5]publicvoidnextPermutation(int[]nums){//从右向左寻找第一个非递减的元素位置intinums.length-2;for(;i0;i--){if(nums[i]nums[i1]){break;}}//如果位置为-1,就直接翻转整个数组if(i!-1){//从右向左寻找第一个大于nums[i]的元素位置for(intjnums.length-1;ji;j--){if(nums[j]nums[i]){swap(nums,i,j);break;}}}//将i1到nums.length-1的元素反转reverse(nums,i1,nums.length-1);}privatevoidswap(int[]nums,inti,intj){inttempnums[i];nums[i]nums[j];nums[j]temp;}privatevoidreverse(int[]nums,intleft,intright){while(leftright){swap(nums,left,right);left;right--;}}5.寻找重复数原题链接直接用HashSet也可以但是要求只用常量级 O(1) 的额外空间publicintfindDuplicate(int[]nums){SetIntegersetnewHashSet();for(intnum:nums){if(set.contains(num)){returnnum;}set.add(num);}return-1;}快慢指针把数组看成一个链表重复数字就是链表的环入口。nums[1,3,4,2,2]index-value index:01234value:134220-1-3-2-4-2-4-... 最终重复数字就是环的入口 因为必然出现两个位置指向同一个节点例如 nums[3]2nums[4]2表示3-2、4-2即为环节点publicintfindDuplicate(int[]nums){//快慢指针intslownums[0];intfastnums[0];// 第一次快慢指针找相遇点do{slownums[slow];fastnums[nums[fast]];}while(slow!fast);// 第二次寻找入口// 从头开始每次走一步直到再次相遇slownums[0];while(slow!fast){slownums[slow];fastnums[fast];}returnslow;}

相关推荐

3招搞定网站建设技术大赛试题,附源码下载避坑指南
3招搞定网站建设技术大赛试题,附源码下载避坑指南

3招搞定网站建设技术大赛试题,附源码下载避坑指南 找建站公司怕被坑高价,手里没点真东西心里没底。别慌,今天直接把 网站建设技术大赛试题 的实战拆解给你,附带 源码下载 的避坑技巧。… · 2026/9/27 19:46:00

华为云Flexus+DeepSeek征文|Dify LLM 应用平台三种部署方案横评:单机、知识库增强、高可用容器化怎么选
华为云Flexus+DeepSeek征文|Dify LLM 应用平台三种部署方案横评:单机、知识库增强、高可用容器化怎么选

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 19:45:53

在Claude Code里面使用Kimi 2.5:通过TaoToken统一Key接入的config.toml配置与验证
在Claude Code里面使用Kimi 2.5:通过TaoToken统一Key接入的config.toml配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 19:45:53

2026最新网站主机多少钱?揭秘5大坑与真实报价
2026最新网站主机多少钱?揭秘5大坑与真实报价

2026最新网站主机多少钱?揭秘5大坑与真实报价 很多老板一上来就问:“服务器到底多少钱?”但我必须泼盆冷水: 别急着问价格,先搞清楚你的备案流程走到哪一步了。… · 2026/9/27 20:17:07

无锡网站排名优化费用一文搞懂避坑指南
无锡网站排名优化费用一文搞懂避坑指南

无锡网站排名优化费用一文搞懂避坑指南 网站被黑挂马,后台莫名多出几十个外链,首页代码被篡改跳转色情网站,这是很多老板半夜惊醒时的噩梦。别慌,先断开服务器连接,备份现有数据,再查阿里云官方文档里的安全日志定位入侵点,这是止损的第一步。很多人以… · 2026/9/27 20:17:07

告别模板丑站:WordPress百度分享内容保姆级建站教程与报价拆解
告别模板丑站:WordPress百度分享内容保姆级建站教程与报价拆解

告别模板丑站:WordPress百度分享内容保姆级建站教程与报价拆解 模板网站太丑,根本撑不起你的品牌形象。 花几千块买的套皮模板,改完代码还是透着一股廉价感,客户一眼就看出是“复制粘贴”的。… · 2026/9/27 20:16:49

AI Compass前沿速览:GPT-5-Codex 、宇树科技世界模型、InfiniteTalk美团数字人、ROMA多智能体框架、混元3D 3.0
AI Compass前沿速览:GPT-5-Codex 、宇树科技世界模型、InfiniteTalk美团数字人、ROMA多智能体框架、混元3D 3.0

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 20:16:49

wordpressflv插件最佳实践
wordpressflv插件最佳实践

搞定WordPress FLV插件,3步解决视频卡顿与服务器负载 域名解析报错、服务器CPU飙红、视频加载转圈半天,这些“域名服务器搞不懂”的痛点,是不是让你抓狂?很多站长以为视频慢是带宽不够,其实往往是 性能优化… · 2026/9/27 20:16:43

搞懂seo排名如何 保姆级建站教程避坑指南
搞懂seo排名如何 保姆级建站教程避坑指南

搞懂seo排名如何 保姆级建站教程避坑指南 域名解析报错、服务器连接超时,这种让人头大的事儿是不是经常发生?很多刚入行的新手,盯着后台那些红字,心里只有一个念头:这网站到底怎么搭才能既稳又快?其实, 域名服务器搞不懂… · 2026/9/27 20:16:43

MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现

简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01

汕头网站建设制作厂家避坑指南:5大注意事项救急
汕头网站建设制作厂家避坑指南:5大注意事项救急

汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01

多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习

简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01

MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现

简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01

汕头网站建设制作厂家避坑指南:5大注意事项救急
汕头网站建设制作厂家避坑指南:5大注意事项救急

汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01

多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习

简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码