• 剑指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 };
  • 相关阅读:
    安卓学习记录(五)——体温表APP.2
    今日学习
    每日学习
    AS插件快速生成javabean
    LA 5842 Equipment (状态压缩+dp)
    LA 4794 Sharing Chocolate (搜索)
    LA 5844 Leet (dfs 搜索)
    uva 11627 Slalom (二分法)
    ZOJ 3031 Robotruck (dp + 单调队列)
    uva 10012 How Big Is It? (greedy + enumerate)
  • 原文地址:https://www.cnblogs.com/wmx24/p/8643315.html
Copyright © 2020-2023  润新知