zoukankan      html  css  js  c++  java
  • 找水王

    题目描述

    设计思想

    若要统计所有数字的出现次数,则水王的出现次数减去其余数字的次数所得的结果大于0,因此我们可以将统计所有数字出现次数转变为统计每个数字出现次数与其余数字出现次数之差。具体的实现方式是从头开始将第一数设置为候选数,出现次数为1,将其与相邻的下一个数作比较,若相等则次数加一否则减一,若此时该候选数的次数被减为0则将下一个数作为候选数重复此步骤,最终剩下的即为水王。其中有一种极端情况是水王的出现次数占一半且将其余数字依次隔开,此时按照上述算法则没有结果,此时水王出现在最后一位,只需要额外统计最后一位的出现次数将其与全长的一半比较即可,若刚好为一半则确定为水王。

    package findWaterKing;
    
    public class findWaterKing {
        public static void main(String[] args) {
            find(new int[]{1,6,2,6,3,6,4,6,5,6});
        }
    
        private static void find(int[] is) {
            int candidate=is[0];
            int times=0;
            int count=0;
            for (int i = 0; i < is.length; i++) {
                if (is[i] == is[is.length-1]) {
                    count++;
                }
                if (times == 0) {
                    candidate = is[i];
                    times = 1;
                    continue;
                }
                if (is[i] == candidate) {
                    times++;
                } else {
                    times--;
                }
            }
            if (count == is.length/2) {
                System.out.println(is[is.length-1]);
            } else {
                System.out.println(candidate);
            }
        }
    }

    结果截图:

  • 相关阅读:
    hdu 1108 最小公倍数
    hdu 1106 排序
    hdu 1097 A hard puzzle
    hdu 1076 An Easy Task
    hdu 1064 Financial Management
    hdu 1061 Rightmost Digit
    hdu 1050 Moving Tables
    hdu 1060 Leftmost Digit
    hdu 1049 Climbing Worm
    hdu1104
  • 原文地址:https://www.cnblogs.com/yangqqq/p/13071731.html
Copyright © 2011-2022 走看看