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

      找水王问题的实质就是如何快速在一串连续的数字里找到出现次数超过一半的数字。我用的是老师提供的思路,把这串数字放到一个数组里面,两个相邻的数字去做比较,如果相等,在向后比较,如果不等把这两个数字都置为-1,标明这两个数字已经相互抵消。水王的数字最多,最后数组里面只有水王的数字和-1。

      

    package Arraysum;
    
    public class FindWaterKing {
        public static void main(String[] args)
        {
            //把id列表放到一个数组里面
            int[] idNum = {1,1,1,1,12,3,11,1,1,15,6,6,77,1,1,1,1};
            //指向前一个数和后一个数的指针
            int previor = 0;
            int next = 1;
            //通过while循环来实现两两相消法
            while((previor < idNum.length-1)&&(next < idNum.length))
            {
                //如果前一个数字和后一个数字相等则指针顺次向后移动一位
                if(idNum[previor] == idNum[next])
                {
                    previor = previor + 1;
                    next = next + 1;
                }
                //如果前一个数和后一个数不相等这两个数就相互消去指针顺次移动两位
                else
                {
                    idNum[previor] = -1;
                    idNum[next] = -1;
                    previor = previor + 2;
                    next = next + 2;
                }
            }
            
            //两两相消完之后找到第一个不是-1的数组元素找到了水王的id
            next = 0;
            while(next < idNum.length)
            {
                if(idNum[next] != -1)
                {
                    System.out.println(idNum[next]);
                    break;
                }
                else
                {
                    next = next + 1;
                }
            }
            
        }
    
    }
  • 相关阅读:
    SHELL脚本自动备份Linux系统
    Linux Shell脚本之自动修改IP
    oracle redo日志维护
    Linux运维工程师面试
    angular 的杂碎报错小知识
    angular.run 妙用
    vue的生命周期
    angular +H5 上传图片 与预览图片
    跨域问题解决方案之chrome插件
    js递归
  • 原文地址:https://www.cnblogs.com/1102whw/p/5512240.html
Copyright © 2011-2022 走看看