zoukankan      html  css  js  c++  java
  • 数组中出现次数超过一半的数字

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

     1 class Solution {
     2 public:
     3     //法一:排序,找到中间那个,然后遍历求出中间那个出现的次数,如果大于一般就返回中间数,否则返回0
     4     //法二:选择一个计数器,初始值为1,从第二个数开始遍历,如果这个数和前一个数相同那么计数器加1,否则减1.
     5     //如果计数器的值为0,那么重新选择下一个元素为起始,计数器重新置位1。
     6     int MoreThanHalfNum_Solution(vector<int> numbers) {
     7         int len=numbers.size();
     8         if(len==0) return 0;
     9         int result=numbers[0];
    10         int count=1;
    11         for(int i=1;i<len;i++)
    12         {
    13             if(count==0)
    14             {
    15                 count=1;
    16                 result=numbers[i];
    17             }
    18             else
    19             {
    20                if(numbers[i]==result)
    21                 count++;
    22                 else count--;
    23             }
    24         }
    25         //判断reslut是否符合条件
    26         count=0;
    27         for(int i=0;i<len;i++)
    28         {
    29             if(result==numbers[i]) count++;
    30         }
    31         return  count>len/2?result:0;
    32     }
    33 };
  • 相关阅读:
    [ZJOI2013]K大数查询 浅谈整体二分
    2019暑假杭二day1测试总结
    2019暑假杭二day2测试总结
    2019暑假杭二day3测试总结
    2019暑假杭二day4测试总结
    2019暑假杭二day5测试总结
    一些有趣的教学视频
    karatsuba乘法
    多项式求逆元
    FFT
  • 原文地址:https://www.cnblogs.com/wsw-seu/p/7885611.html
Copyright © 2011-2022 走看看