/*
题目:
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。
例如输入一个长度为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; }

  

最新文章

  1. CSS3学习总结
  2. 使用Vmware虚拟机部署开发环境之Mac OS X系统安装
  3. bzoj2083【Poi2010】Intelligence test
  4. tensorflow 学习笔记
  5. mssql注入
  6. 使用jQuery Mobile和Phone Gap开发Android应用程序
  7. 4月数据库流行度排行榜 MySQL能否追上Oracle
  8. debug.keystore文件不存在解决办法
  9. 谈论高并发(三十)解析java.util.concurrent各种组件(十二) 认识CyclicBarrier栅栏
  10. Visual Studio2017数据库架构比较
  11. 我把一些Linux的中英文命令做了对应翻译大家参考一下
  12. hdu1255扫描线计算覆盖两次面积
  13. [No000018B]写代码要用 Vim,因为越难入门的工具回报越大
  14. 56.纯 CSS 描述程序员的生活
  15. Charles抓包实战详解
  16. C++课堂作业_02_PAT1025.反转链表
  17. Ubuntu14.04 安装git
  18. iOS autoLayout总结
  19. UVa 11636 你好 世界!(贪心)
  20. android -chrome 调试

热门文章

  1. DOCKER 学习笔记4 认识DockerCompose 多容器编排
  2. RestTemplate远程调用方法
  3. Ops:命名规范
  4. 5G为人工智能与工业互联网赋能 高清79页PPT
  5. Go语言实现:【剑指offer】滑动窗口的最大值
  6. 在.NET Core中使用MachineKey
  7. [1天搞懂深度学习] 读书笔记 lecture I:Introduction of deep learning
  8. Python3 (一) 基本类型
  9. pytorch之 classification
  10. Centos7 LVM扩容实例