【20】剑指offer——数组中出现次数超过一半的数字【最全题解】
题目描述数组中有一个数字出现的次数超过数组长度的一半请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次超过数组长度的一半因此输出2。如果不存在则输出0。解题思路思路1我首先想到的利用map容器因为map容器是具有两个数的对应关系可以分别表示数字和数字出现的次数然后统计出现的次数从而找到满足条件的答案。代码如下class Solution { public: int MoreThanHalfNum_Solution(vectorint numbers) { int len numbers.size(); if (len 0) return 0; mapint, int ans; mapint, int::iterator it; for (int i 0; i len; i){ it ans.find(numbers[i]); if (it ! ans.end()){ ans[numbers[i]]; } else { ans[numbers[i]] 1; } } int ans_first 0; int ans_second 0; for (it ans.begin(); it ! ans.end(); it){ if ((*it).second ans_second){ ans_first (*it).first; ans_second (*it).second; } else{ continue; } } if (ans_second (len) / 2){ return ans_first; } else{ return 0; } } };然后我看到了题解找到了一个和我思路一致的答案但是明显代码比我简单很多也更加易读在这里分享链接https://www.nowcoder.com/questionTerminal/e8a1b01a2df14cb2b228b30ee6a92163?fdiscussion 来源牛客网 class Solution { public: int MoreThanHalfNum_Solution(vectorint numbers) { int n numbers.size(); //map 记录出现次数 mapint, int m; int count; for (int i 0; i n; i) { count m[numbers[i]]; if (count n/2) return numbers[i]; } return 0; } };思路2利用快排的思想首先进行排序之后取排序后的数组中间的数字即可好处是简单易懂缺点是时间复杂度过高排序耗时。代码如下class Solution { public: int MoreThanHalfNum_Solution(vectorint numbers) { int len numbers.size(); if (len 0) return 0; //if (len 1) return numbers[0]; sort(numbers.begin(), numbers.end()); int ans numbers[(len)/2]; int count 0; for (int i 0; i len; i){ if (numbers[i] ans){ count; } if (count len / 2){ return ans; } } return 0; } };思路3这个思路非常巧妙但是非常变态。因为是数组中大于一半长度大小的元素所以当第一次遍历数组的时候记录重复元素和出现次数对数组元素两两进行比较如果相同则出现次数加一如果不同则出现次数减一如果出现次数为0则替换重复元素为新比较的元素出现次数设为1如果数组中存在大于一半长度的元素则遍历一遍之后一定会找出。然后再遍历一遍数组记录其出现的次数如果大于一半长度则返回。代码如下class Solution { public: int MoreThanHalfNum_Solution(vectorint numbers) { int len numbers.size(); if (len 0) return 0; int ans numbers[0]; int count 1; for (int i 1; i len; i){ if (numbers[i] ans){ count ; } else { count --; } if (count 0){ ans numbers[i]; count 1; } } count 0; for (int i 0; i len; i){ if (numbers[i] ans) { count ; } if (count len / 2){ return ans; } } return 0; } };苦心人天不负卧薪尝胆三千越甲可吞吴我爱算法

相关新闻

A Blind Stereoscopic Image Quality Evaluator With Segmented Stacked Autoencoders

A Blind Stereoscopic Image Quality Evaluator With Segmented Stacked Autoencoders

摘要 该论文模拟了人类视觉感知的全过程,从人眼到额叶,特别是针对视网膜神经细胞(RGCs)和外侧膝状体核(LGNs)中的边缘和颜色的信号处理。除此之外为了模拟视觉皮层的复杂的和深度的结构,采用了分段堆放自编码器&#x…

2026/10/13 1:18:37 阅读更多 →
OpenCV的应用:九宫格小人识别

OpenCV的应用:九宫格小人识别

1、实验内容:自动是被下列九宫格图像中小人的位置,并将小人分割出来 2、思路分析: 本实验的难点首先在于如何在一幅图像中把九幅图片分离出来,其次如何能够从分离出来的九幅图片中识别出小人图像。本人的具体思路是这样的&#x…

2026/10/15 2:25:13 阅读更多 →
ClosedXML深度解析:.NET Excel处理库的架构设计与企业级应用实践

ClosedXML深度解析:.NET Excel处理库的架构设计与企业级应用实践

ClosedXML深度解析:.NET Excel处理库的架构设计与企业级应用实践 【免费下载链接】ClosedXML ClosedXML is a .NET library for reading, manipulating and writing Excel 2007 (.xlsx, .xlsm) files. It aims to provide an intuitive and user-friendly interface…

2026/10/13 5:42:52 阅读更多 →

最新新闻

拆解一个2万Star的AI编程教程:从内容设计到增长逻辑

拆解一个2万Star的AI编程教程:从内容设计到增长逻辑

写完这篇内容前,我先说个背景:我在开发者社区里泡了快十年,见过太多开源项目从热到凉。所以当一个 AI 编程教程能攒到 2 万 Star,还进了主流 AI 助手的推荐池,这件事本身就值得停下来仔细拆一拆。2 万 Star 是什么概念…

2026/10/16 4:58:28 阅读更多 →
用Python与AI一句话生成PPT:AiPy全流程解析

用Python与AI一句话生成PPT:AiPy全流程解析

1. 一句话能生成 PPT?先聊聊手动排版的老问题1.1 排版为什么这么费时间:三个真实损耗如果你也经历过那种晚上十点还在跟文本框较劲的时刻——把标题字号从 32 调到 36,又因为第二页正文挤出了边界而调回 32——那这篇内容就是写给你的。做 PP…

2026/10/16 4:58:28 阅读更多 →
双节锂电池主动均衡设计:MP2642+TM4C129工程落地实践

双节锂电池主动均衡设计:MP2642+TM4C129工程落地实践

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

2026/10/16 4:58:28 阅读更多 →
Redisson分布式锁实战:从SETNX避坑到Spring Boot集成与调优

Redisson分布式锁实战:从SETNX避坑到Spring Boot集成与调优

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

2026/10/16 4:58:28 阅读更多 →
AlarmODBC服务配置与故障排查全指南

AlarmODBC服务配置与故障排查全指南

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

2026/10/16 4:58:28 阅读更多 →
两串锂电池被动均衡方案:基于MP2642GR-Z与PIC24FV32KA302的实战解析

两串锂电池被动均衡方案:基于MP2642GR-Z与PIC24FV32KA302的实战解析

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

2026/10/16 4:57:27 阅读更多 →

日新闻

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

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

2026/10/16 0:00:05 阅读更多 →
信号与系统频域分析作业解题指南

信号与系统频域分析作业解题指南

1. 作业背景与核心要求解析信号与系统作为电子信息类专业的核心基础课,其作业设计往往直接关联课程的核心知识框架。2026年春季第六次作业的布置,通常对应着课程进展到频域分析的关键阶段。根据常规教学进度推测,本次作业可能涉及以下核心内容…

2026/10/16 0:00:05 阅读更多 →
Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

1. 从一个"四不像"的练手项目说起如果你已经看完了Django的官方教程前几章,跟着敲完了投票应用,大概会有一种"我好像会了,又好像什么都不会"的割裂感。教程里每个知识点都是拆开的——这一章讲模型,下一章讲视…

2026/10/16 0:00:05 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/15 16:18:54 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/15 19:41:51 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/15 13:48:15 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

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

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

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

2026/10/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

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

2026/10/15 9:49:14 阅读更多 →