/*
题目:
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。
例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。
*/
/*
思路:
数组中出现次数超过数组长度的一半的值为target,
则从头到尾遍历数组,遇到不同的值-1,遇到相同的值次数+1,
最终剩下的数字就可能是target,
验证其出现次数是否超过数组长度的一半。
*/
#include<iostream>
#include<string.h>
#include<stdio.h>
#include<set>
#include<vector> using namespace std; bool isTarget(vector<int> &numbers,int targetValue){
int times = 0;
for(int i = 0; i < numbers.size(); i++){
if(numbers[i] == targetValue){
times++;
}
}
if(times*2 > numbers.size()){
return true;
}else{
return false;
}
} int MoreThanHalfNum_Solution(vector<int> numbers) {
if(numbers.size() == 0) return 0;
int target = numbers[0];
int myCount = 1;
for(int i = 1; i < numbers.size(); i++){
if(myCount == 0){
target = numbers[i];
myCount = 1;
}else if(target == numbers[i]){
myCount++;
}else{
myCount--; }
}
if(isTarget(numbers,target)){
return target;
}else{
return 0;
} } int main(){
vector<int> a = {4,2,1,4,4,4};
cout<<MoreThanHalfNum_Solution(a)<<endl; }

  

剑指offer-面试题39-数组中出现次数超过一半的数字-抵消法的更多相关文章

  1. 剑指Offer:面试题29——数组中出现次数超过一半的数字(java实现)

    PS:在前几天的面试中,被问到了这个题.然而当时只能用最低效的方法来解. 问题描述: 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2, ...

  2. 剑指Offer - 九度1370 - 数组中出现次数超过一半的数字

    剑指Offer - 九度1370 - 数组中出现次数超过一半的数字2013-11-23 03:55 题目描述: 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组 ...

  3. 【剑指Offer】28、数组中出现次数超过一半的数字

      题目描述:   数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.   例如:输入如下所示的一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过 ...

  4. 剑指Offer:找出数组中出现次数超过一半的元素

    题目:找出数组中出现次数超过一半的元素 解法:每次删除数组中两个不同的元素,删除后,要查找的那个元素的个数仍然超过删除后的元素总数的一半 #include <stdio.h> int ha ...

  5. 剑指offer(28)数组中出现次数超过一半的数

    题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2. ...

  6. 《剑指offer》面试题39. 数组中出现次数超过一半的数字

    问题描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字. 你可以假设数组是非空的,并且给定的数组总是存在多数元素. 示例 1: 输入: [1, 2, 3, 2, 2, 2, 5, 4, ...

  7. 剑指 Offer 39. 数组中出现次数超过一半的数字 + 摩尔投票法

    剑指 Offer 39. 数组中出现次数超过一半的数字 Offer_39 题目描述 方法一:使用map存储数字出现的次数 public class Offer_39 { public int majo ...

  8. 剑指 Offer 39. 数组中出现次数超过一半的数字

    剑指 Offer 39. 数组中出现次数超过一半的数字 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字. 你可以假设数组是非空的,并且给定的数组总是存在多数元素. 示例 1: 输入: [ ...

  9. 力扣 - 剑指 Offer 39. 数组中出现次数超过一半的数字

    题目 剑指 Offer 39. 数组中出现次数超过一半的数字 思路1(排序) 因为题目说一定会存在超过数组长度一半的一个数字,所以我们将数组排序后,位于length/2位置的一定是众数 代码 clas ...

随机推荐

  1. 百度MP3音乐API接口及应用

    当你在百度去搜索一首歌时,你会发现有种更简单的方法. http://box.zhangmen.baidu.com/x?op=12&count=1&title=歌名$$作者$$$$ 例如 ...

  2. CSS的常用单位介绍

    ①px: 像素单位:它是英文单词pixel的缩写,意思为像素,即构成图片的每一个点,为图片显示的最小单位.它是一个绝 对尺寸单位,是固定的. ②em: 相对长度单位:它是英文单词emphasize的缩 ...

  3. 你都这么拼了,面试官TM怎么还是无动于衷

    面试,对于每个人而然并不陌生,可以说是必须经历的一个过程了,小到一场考试,大到企业面试,甚至大型选秀...... 有时自己明明很努力了,但偏偏会在面试环节出了插曲,比如,紧张就是最容易出现的了. 我相 ...

  4. 深度学习中的特征(feature)指的是什么?

    一般在machine learning意义上,我们常说的feature,是一种对数据的表达.当然,要衡量一种feature是否是合适的表达,要根据数据,应用,ML的模型,方法....很多方面来看.一般 ...

  5. 编写SQL语句(快速回顾)

    注:源自于<Java程序员面试秘笈>! 1.创建数据库MYDB create database MYDB 2.创建学生表student (sno,sname,ssex,sage,sclas ...

  6. 命令拼接符 || && 区别

    &&   前面的命令执行成功,执行拼接符后面的命令. ||      前面的命令执行失败,执行拼接符后面的命令. 举例: (1)whoami && net user 真 ...

  7. TCP加速方式

    使用windows scaling TCP Extensions for High Performance, RFC1323,https://www.ietf.org/rfc/rfc1323.txt ...

  8. 如何在 Linux 中找出 CPU 占用高的进程

    1) 怎样使用 top 命令找出 Linux 中 CPU 占用高的进程 在所有监控 Linux 系统性能的工具中,Linux 的 top 命令是最好的也是最知名的一个.top 命令提供了 Linux ...

  9. k8s系列---hpa扩容

    centos-master:172.16.100.60 centos-minion:172.16.100.62 k8s,etcd,docker等都是采用yum装的,部署参考的k8s权威指南和一个视频, ...

  10. Axure实现抽奖转盘(二)

    这个小应用主要用到了以下功能: 1.生成一个0-360之间的随机数,保存至变量: 2.旋转转盘到达指定角度,案例中为3-4圈(1080+变量): 3.转盘逐渐停止通过动画(缓慢退出)实现: 4.转盘停 ...