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);
            }
        }
    }

    结果截图:

  • 相关阅读:
    java中将表单转换为PDF
    base64图片
    ORACLE中用户等系统信息操作
    jquery中live is not a function的问题
    完全卸载Oracle11G
    jquery 获取鼠标和元素的坐标点
    JS的多线程
    Oracle和SQLServer解锁杀进程
    JAVA 通过LDAP获取AD域用户及组织信息
    oracle基础语法大全
  • 原文地址:https://www.cnblogs.com/yangqqq/p/13071731.html
Copyright © 2011-2022 走看看