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

    题目描述

    数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。
     
    思路一:
     1 class Solution {
     2 public:
     3     int MoreThanHalfNum_Solution(vector<int> numbers) {
     4         int len = numbers.size();
     5         if (len == 0)
     6             return 0;
     7         int num = 1, temp = numbers[0];
     8         for (int i = 1; i < len; i++) {
     9             if (numbers[i] != temp) {
    10                 if (num == 0) {
    11                     temp = numbers[i];
    12                     num = 1;
    13                 } else {
    14                     num--;
    15                 }
    16             } else {
    17                 num++;
    18             }
    19         }
    20         int ans = 0;
    21         for (int i = 0; i < len; i++) {
    22             if (temp == numbers[i])
    23                 ans++;
    24         }
    25         if (ans > (len >> 1))
    26             return temp;
    27         else
    28             return 0;
    29     }
    30 };

    思路二:

    借鉴快排思想。

  • 相关阅读:
    go context
    go etcd
    go logs
    go config
    go tail
    kafka与zookeeper
    go kafka
    go mysql
    array_map array_walk
    单独配置的nginx mysql 重启
  • 原文地址:https://www.cnblogs.com/qinduanyinghua/p/11386602.html
Copyright © 2011-2022 走看看