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         // 从数组中移除两个不相同的数值,如果有出现的次数超过数组长度的一半的数,那么就是最后剩下来的那个
     5         int numSize = numbers.size();
     6         int candidate = 0;  // 候选数,可能是出现的次数超过数组长度的一半的数
     7         int cnt = 0;    // 标记当前的候选数没被抵消的次数
     8         for(int i = 0; i < numSize; i++) {
     9             if(cnt == 0) candidate = numbers[i];    // 重选候选数
    10             if(candidate == numbers[i]) cnt++;  // 次数加1
    11             else cnt--; // 次数减1
    12         }
    13         cnt = 0;
    14         for(int i = 0; i < numSize; i++)    // 检验
    15             if(numbers[i] == candidate)
    16                 cnt++;
    17         if(cnt * 2 <= numSize) return 0;
    18         return candidate;
    19     }
    20 };
  • 相关阅读:
    Apache Shiro 使用手册(二)Shiro 认证
    jdk 环境变量
    IDEA 相关整理
    mysql 相关命令
    hbase 迁库移库步骤
    Linux 常用指令整理
    springboot aop + logback + 统一异常处理 打印日志
    查看jar包的jdk版本
    maven 将jar包推送到自己本机的maven库
    jar包内的文件导出的注意点
  • 原文地址:https://www.cnblogs.com/jacen789/p/7747651.html
Copyright © 2011-2022 走看看