剑指offer-数组中出现次数超过一半的数字

Posted FlyingWarrior

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指offer-数组中出现次数超过一半的数字相关的知识,希望对你有一定的参考价值。

题目描述

数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。

解题思路

考虑记录两个值:一个是数组中的数字,另一个是他出现的次数。每遍历到一个数字,如果与保存值相同,则次数加1,否则减1;若次数减到0,则把记录值换成下一个数字。最后得到次数大于0的数字后,再从头遍历记录它出现的次数,同样进行上述步骤,若最后次数仍大于0,则为所需值。

代码

 1 class Solution {
 2 public:
 3     int MoreThanHalfNum_Solution(vector<int> numbers) {
 4         if(numbers.size() == 0)
 5             return 0;
 6         int mh = numbers[0];
 7         int count = 1;
 8         for(int i = 1; i < numbers.size(); i++){
 9             if(numbers[i] == mh){
10                 count++;
11             }
12             else{
13                 count--;
14                 if(count == 0 && i+1 != numbers.size()){
15                     mh = numbers[i + 1];
16                 }
17             }
18         }
19         if(count > 0){
20             count = 0;
21             for(int i = 0; i < numbers.size(); i++){
22                 if(mh == numbers[i])
23                     count++;
24                 else 
25                     count--;
26             }
27         }
28         if(count > 0)
29             return mh;
30         else
31             return 0;
32     }
33 };

 

以上是关于剑指offer-数组中出现次数超过一半的数字的主要内容,如果未能解决你的问题,请参考以下文章

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

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

python剑指offer数组中出现次数超过一半的数字

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

数组中出现次数超过一半的数字-剑指Offer

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