zoukankan      html  css  js  c++  java
  • 剑指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 };
  • 相关阅读:
    CTF---隐写术入门第二题 小苹果
    文件上传
    文件读取
    sqlmap之绕过waf思路
    【小技巧分享】如何通过微博图片进行社工Po主
    Windows 11恢复传统右键菜单-2021.10.5正式版
    sql注入之Oracle注入
    CTF之buuctf
    常见sql注入payload
    信息收集之Github
  • 原文地址:https://www.cnblogs.com/wmx24/p/8643315.html
Copyright © 2011-2022 走看看