【剑指offer】面试题29:数组中出现次数超过一半的数字
题目:
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。
思路:
保存两个值:一个数组中的数字、一个出现的次数
如果当前值和保存的数字相同,则次数加1;如果不同,则次数减1;当次数为0时,保存当前数字、置次数为1。
代码:
class Solution {
public:
int MoreThanHalfNum_Solution(vector<int> numbers) {
if(numbers.size()==) return ;//好吧,OJ说这里应该为0
int res=numbers[];
int cnt=;
for(int i=;i<numbers.size();++i)
{
if(numbers[i]==res) cnt++;
else
{
if(cnt) cnt--;
else//次数为0时
{
res=numbers[i];
cnt++;
}
}
}
if(CheckMoreThanHalf(numbers,res)) return res;
else return ;
}
private:
bool CheckMoreThanHalf(vector<int> numbers, int res)
{
int count=;
for(int i=;i<numbers.size();++i)
{
if(numbers[i]==res) count++;
}
if(count>numbers.size()/) return true;
else return false;
}
};
【剑指offer】面试题29:数组中出现次数超过一半的数字的更多相关文章
- 剑指Offer:面试题29——数组中出现次数超过一半的数字(java实现)
PS:在前几天的面试中,被问到了这个题.然而当时只能用最低效的方法来解. 问题描述: 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2, ...
- 剑指Offer - 九度1370 - 数组中出现次数超过一半的数字
剑指Offer - 九度1370 - 数组中出现次数超过一半的数字2013-11-23 03:55 题目描述: 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组 ...
- 【剑指Offer】28、数组中出现次数超过一半的数字
题目描述: 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字. 例如:输入如下所示的一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过 ...
- 《剑指offer》39题—数组中出现次数超过一半的数字
题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2. ...
- 剑指Offer:找出数组中出现次数超过一半的元素
题目:找出数组中出现次数超过一半的元素 解法:每次删除数组中两个不同的元素,删除后,要查找的那个元素的个数仍然超过删除后的元素总数的一半 #include <stdio.h> int ha ...
- 剑指offer(28)数组中出现次数超过一半的数
题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2. ...
- 【Offer】[39] 【数组中出现次数超过一半的数字】
题目描述 思路分析 测试用例 Java代码 代码链接 题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如,输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数 ...
- 《剑指offer》面试题39. 数组中出现次数超过一半的数字
问题描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字. 你可以假设数组是非空的,并且给定的数组总是存在多数元素. 示例 1: 输入: [1, 2, 3, 2, 2, 2, 5, 4, ...
- 剑指offer 面试题56. 数组中只出现一次的两个数字
题目描述 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. 方法1:用set记录出现过的数字 class Solution { public: void F ...
- 【剑指offer】找出数组中任意一个重复的数字,C++实现
原创博文,转载请注明出处! # 题目 # 思路 对于长度为n的数组,范围为0~n-1的数字而言,如果不粗在重复数字,则排序后数组元素和数组角标相同.如果存在重复数字,则在排序的过程中会出现不同下标对应 ...
随机推荐
- [WPF] 将普通的Library工程,改造成WPF Custom Control 的Library
1. 添加References PresentationCore PresentationFramework System.Xaml WindowsBase2. 修改AssemblyInfo.xsus ...
- poj 3104 Drying(二分搜索之最大化最小值)
Description It is very hard to wash and especially to dry clothes in winter. But Jane is a very smar ...
- qt tablewidget搜索效果如下
from PyQt4.QtCore import *from PyQt4.QtGui import *from PyQt4.Qt import *import sysfrom aa1 import U ...
- C语言--返回局部变量的地址
我们可能会经常写出这样的代码: int add(int a , int b) { return a + b; } 当然,这是合理的写法,使函数的返回值为 int ,所以,调用函数后会返回一个i ...
- TravelCMS旅游网站系统诞生记-1(后台框架篇)
- NFinal学习笔记(一)
NFinal框架,最快的netWeb框架,其有三大特色,NFinalServer,NFinalBuild,NFinal代码生成器(生成web层) 首先学习了NFinalServer. NFinalSe ...
- (转)web.config详解之在文件中配置网站默认页面
在<configuration></configuration>中添加下面的配置 <system.webServer> <defaultDocu ...
- easyui treeJson 带层数
public string GetTreeNav(int ID,int Num) { StringBuilder sb = new StringBuilder(); sb.Append("[ ...
- tips[Android]
View:2D graphics,SurfaceView:3D graphics. ProgressBar进度渐进动画,可以使用ObjectAnimator实现.动画相关的类: android.vie ...
- Java关键字transient和volatile
transient标记的变量,在进行序列化的时候,这个字段不进行序列化操作. volatile标记的变量,在进行读写时,必须强制的与内存同步,即在读的时候需要从内存中读取,写的时候也需要回写到内存中. ...