这个找多个水王的问题我想了比较长的时间。让我有两个地方比较难想。因为我们是要用到前一个问题的思路,所以还是采用那种消除的方法来解决。这次水王有多个,想用以前的方法,需要把三个水王看成一个整体。遍历数组时只要当前元素和水王数组中的任何一个元素相同,相应的计数变量增加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]); } }