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

    【题目描述】

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

    【原题重现:2016 腾讯C/C++研发工程师】
        春节期间小明使用微信收到很多红包,非常开心。在查看领取红包的记录时发现,某个红包金额出现的次数超过了红包总数的一半。请帮小明找到该红包的金额。写出具体算法思路和代码实现,要求算法尽可能高效。
     
    【解题思路】
       两两比较,发现不一样则丢弃掉(做上标记),否则则保留,最终留下来的就一定是总数超过一半的那个数了。
    【代码实现】
     1 #include <iostream>
     2 #include <vector>
     3 
     4 using namespace std;
     5 
     6 class Solution {
     7 public:
     8     int MoreThanHalfNum_Solution(vector<int> numbers) {
     9         if (numbers.size() == 0)
    10             return 0;
    11         if (numbers.size() == 1)
    12             return numbers.front();
    13         vector<int> num(numbers);
    14         int len = num.size() % 2 ? num.size() - 1 : num.size();
    15         for (int i = 1; i < len; i+=2)
    16         {
    17             if (num[i - 1] != num[i])
    18                 num[i - 1] = num[i] = -1;
    19         }
    20 
    21         for (int i = 0; i < len; i++)
    22         {
    23             if (num[i]>0)
    24             {
    25                 return num[i];
    26             }
    27         }
    28         return 0;
    29     }
    30 };
    31 
    32 
    33 int main(void)
    34 {
    35     Solution *s = new Solution();
    36     vector <int> vec{ 1, 2, 3, 2, 4, 2, 5, 2, 3 };
    37     cout << s->MoreThanHalfNum_Solution(vec) << endl;
    38     system("pause");
    39     return 0;
    40 }
  • 相关阅读:
    使用httputils上传图片到服务器
    Android与服务器http连接模块代码
    简单的三次登陆和入门级九九乘法表的实现
    简单购物车的实现
    python常见数据类型
    python基础一
    python入门一
    python简介
    day1 java基础语法
    LeftStr函数使用
  • 原文地址:https://www.cnblogs.com/lou424/p/5032509.html
Copyright © 2011-2022 走看看