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

    https://www.nowcoder.com/questionTerminal/e8a1b01a2df14cb2b228b30ee6a92163

    描述

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

    解析

    采用阵地攻守的思想:
    第一个数字作为第一个士兵,守阵地;count = 1;
    遇到相同元素,count++;
    遇到不相同元素,即为敌人,同归于尽,count--;当遇到count为0的情况,又以新的i值作为守阵地的士兵,继续下去,到最后还留在阵地上的士兵,有可能是主元素。
    再加一次循环,记录这个士兵的个数看是否大于数组一半即可。(再循环一次,是因为题目没有说明这样的数必定存在。)

    代码

    public class Solution {
        public int MoreThanHalfNum_Solution(int[] numbers) {
            if (null == numbers || numbers.length <= 0) {
                return 0;
            }
            int n = numbers.length;
    
            int num = numbers[0], count = 1;
            for (int i = 1; i < n; i++) {
                if (numbers[i] == num)
                    count++;
                else
                    count--;
                if (count == 0) {
                    num = numbers[i];
                    count = 1;
                }
            }
            // Verifying
            count = 0;
            for (int i = 0; i < n; i++) {
                if (numbers[i] == num)
                    count++;
            }
            if (count * 2 > n)
                return num;
            return 0;
        }
    }
  • 相关阅读:
    关于javascript获取页面高度宽度
    regexp_substr在oracle9i的替换方案
    iOS-数据存储
    iOS-导入XMPP框架
    iOS-WWDC
    iOS-在Xcode中使用Git进行源码版本控制(转)
    iOS-AFN
    iOS-网络基础
    iOS-UIDynamic
    iOS-动画
  • 原文地址:https://www.cnblogs.com/fanguangdexiaoyuer/p/10787577.html
Copyright © 2011-2022 走看看