剑指Offer-28.数组中出现次数超过一半的数字(C++/Java)
题目:
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。
分析:
可以先假设数组中有超过数组长度一半的元素,找到这个元素,然后再验证。
对数组进行排序,如果有一个数字出现的次数超过数组长度的一半,那么这个元素一定是数组长度/2索引位置的那个元素,再遍历数组,统计出现的次数是否大于一半即可。
还可以利用投票法,当下一个元素与上一个元素相同时,计数+1,不同时计数-1,计数为0时重新记录数字,如果存在超过一半的元素,那么就一定是最后所记录的元素,同样的遍历数组验证一下就可以了。
程序:
C++
class Solution {
public:
int MoreThanHalfNum_Solution(vector<int> numbers) {
int count = ;
int res = ;
for(int num:numbers){
if(count == )
res = num;
if(num == res)
count++;
else
count--;
}
count = ;
for(int num:numbers){
if(num == res)
count++;
}
return count > numbers.size()/ ? res : ;
}
};
class Solution {
public:
int MoreThanHalfNum_Solution(vector<int> numbers) {
sort(numbers.begin(), numbers.end());
int count = ;
int mid = numbers.size() / ;
for(int nums:numbers){
if(nums == numbers[mid])
count++;
}
return count > mid ? numbers[mid] : ;
}
};
Java
import java.util.*;
public class Solution {
public int MoreThanHalfNum_Solution(int [] array) {
int count = 0;
int mid = array.length / 2;
Arrays.sort(array);
for(int num:array){
if(num == array[mid])
count++;
}
return count > mid ? array[mid] : 0;
}
}
剑指Offer-28.数组中出现次数超过一半的数字(C++/Java)的更多相关文章
- 剑指Offer 28. 数组中出现次数超过一半的数字 (数组)
题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2. ...
- [剑指Offer] 28.数组中出现次数超过一半的数字
[思路]将每个数字都存入map中作为key值,将它们出现的次数作为value值,当value超过一半时则返回其key值. class Solution { public: int MoreThanHa ...
- 剑指Offer:数组中出现次数超过一半的数字【39】
剑指Offer:数组中出现次数超过一半的数字[39] 题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如,输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于这 ...
- 剑指 Offer 39. 数组中出现次数超过一半的数字 + 摩尔投票法
剑指 Offer 39. 数组中出现次数超过一半的数字 Offer_39 题目描述 方法一:使用map存储数字出现的次数 public class Offer_39 { public int majo ...
- 剑指 Offer 39. 数组中出现次数超过一半的数字
剑指 Offer 39. 数组中出现次数超过一半的数字 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字. 你可以假设数组是非空的,并且给定的数组总是存在多数元素. 示例 1: 输入: [ ...
- 力扣 - 剑指 Offer 39. 数组中出现次数超过一半的数字
题目 剑指 Offer 39. 数组中出现次数超过一半的数字 思路1(排序) 因为题目说一定会存在超过数组长度一半的一个数字,所以我们将数组排序后,位于length/2位置的一定是众数 代码 clas ...
- 【剑指Offer】数组中出现次数超过一半的数字 解题报告(Python)
[剑指Offer]数组中出现次数超过一半的数字 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-inter ...
- 【Java】 剑指offer(39) 数组中出现次数超过一半的数字
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如 ...
- Go语言实现:【剑指offer】数组中出现次数超过一半的数字
该题目来源于牛客网<剑指offer>专题. 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组 ...
- 剑指OFFER之数组中出现次数超过一半的数字(九度OJ1370)
题目描述: 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2 ...
随机推荐
- k8s的yaml说明
理解k8s里的几个概念 Kubernetes 通过各种 Controller 来管理 Pod 的生命周期.为了满足不同业务场景,Kubernetes 开发了 Deployment.ReplicaSet ...
- 使用create-react-app+react-router-dom+axios+antd+react-redux构建react项目
1.安装.构建 # 全局安装 npm install -g create-react-app # 构建一个my-app的项目 npx create-react-app my-app cd my-app ...
- Android TitleBar推荐
版权声明:本文为xing_star原创文章,转载请注明出处! 本文同步自http://javaexception.com/archives/206 Android TitleBar推荐 这段时间在帮别 ...
- Test111
这是一个测试 以下是截图 以下是代码标记 @@@code [XmlRpcMethod("blogger.deletePost")] haaa ggg @@# publi ...
- Linux第二章-Linux常用命令
一.Linux常用快捷键 快捷键 作用 Tab 补全文件名或者路径 Ctrl + L 清除屏幕,然后,在最上面重新显示目前光标所在的这一行的内容. Ctrl + C 终止当前进程 Ctrl + D 注 ...
- 1+x 证书 Web 前端开发中级理论考试(试卷 8 )含答案
1+x 证书 Web 前端开发中级理论考试(试卷 8 ) 官方QQ群 转载请注明来源:妙笔生花个人博客http://blog.zh66.club/index.php/archives/438/ 一.单 ...
- Java之ssh框架spring配置文件配置定时任务
最近做了一个数据同步功能,要求晚上0点去定时同步数据,这是个老项目框架用的ssh,定时任务基于quartz,废话不多说,下面详细说说相关配置. 在spring的配置文件中: <!-- 0点定时任 ...
- JAVA集合框架(二)-List和Set
List的常用实现类 list集合是有序的,顺序即添加的顺序,元素是可重复的. ArrayList LinkedList Vector ArrayList 底层基于数组实现.在add元素的过程中,如果 ...
- 分布式应用监控: SkyWalking 快速接入实践
分布式应用,会存在各种问题.而要解决这些难题,除了要应用自己做一些监控埋点外,还应该有一些外围的系统进行主动探测,主动发现. APM工具就是干这活的,SkyWalking 是国人开源的一款优秀的APM ...
- c#中的Nullable(可空类型)
在C#中使用Nullable类型(给整型赋null值的方法) 在C#1.x的版本中,一个值类型变量是不可以被赋予null值的,否则会产生异常.在C#2.0中,微软提供了Nullable类型,允许用它定 ...