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;
                }
            }
            
        }
    
    }
  • 相关阅读:
    init进程解析rc文件的相关函数分析
    Ubuntu 安装Android Studio与使用手册
    Vim的撤销与重做
    Vim 配色设置与配色脚本语法
    js常用的语句
    xshell常用的命令
    java常用的语句
    maven工程配置日志
    根据一个oss的pdf文件的 地址转换成一个File文件
    根据一个oss的地址把图片转换成一个文件
  • 原文地址:https://www.cnblogs.com/1102whw/p/5512240.html
Copyright © 2011-2022 走看看