找水王 多个水王

  这个找多个水王的问题我想了比较长的时间。让我有两个地方比较难想。因为我们是要用到前一个问题的思路,所以还是采用那种消除的方法来解决。这次水王有多个,想用以前的方法,需要把三个水王看成一个整体。遍历数组时只要当前元素和水王数组中的任何一个元素相同,相应的计数变量增加1。如果没有一个相同,计数变量都要减1。z这两个方面保证了三个水王是一个整体。难理解的是元素和水王数组中的任何一个都不相同的时候,水王数组的计数变量都要减1。代码是我看了别人的又重新写的。

package Arraysum;

public class FindWaterKing {
    public static void main(String[] args)
    {
        //把id列表放到一个数组里面
        int[] idNum = {1,8,1,6,9,6,7,6,6,1,5,5,1,7,6,5,5,6,5,5,1,1,6};
        //水王数组
        int[] waterKing = new int[3];
        //水王数组数量的数组
        int[] wkNum = new int[3];
        //初始化水王数组和水王数量数组
        for(int i = 0;i < 3;i++)
        {
            waterKing[i] = -1;
            wkNum[i] = 0;
        }
        //查找三个水王的循环
        for(int i = 0;i < idNum.length;i++)
        {
            //先检查一下当前水王数量数组中那个元素为0那个元素为0就把那个元素对应的水王值为当前idNum数组中的元素
                if(wkNum[0] == 0)
                {
                    waterKing[0] = idNum[i];
                    wkNum[0] = wkNum[0] + 1;
                }
                else if(wkNum[1] == 0)
                {
                    waterKing[1] = idNum[i];
                    wkNum[1] = wkNum[1] + 1;
                }
                else if(wkNum[2] == 0)
                {
                    waterKing[2] = idNum[i];
                    wkNum[2] = wkNum[2] + 1;
                }
                else if(idNum[i] == waterKing[0])
                {
                    wkNum[0] = wkNum[0] + 1;
                }
                else if(idNum[i] == waterKing[1])
                {
                    wkNum[1] = wkNum[1] + 1;
                }
                else if(idNum[i] == waterKing[2])
                {
                    wkNum[2] = wkNum[2] + 1;
                }
                else
                {
                    wkNum[0] = wkNum[0] - 1;
                    wkNum[1] = wkNum[1] - 1;
                    wkNum[2] = wkNum[2] - 1;
                }
        }
        System.out.println("水王是:");
        System.out.println(waterKing[0]+" "+waterKing[1]+" "+waterKing[2]);
        
    }

}

 

转载于:https://www.cnblogs.com/1102whw/p/5528464.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值
>