【问题标题】:finding multiple matching numbers in a 2d array and returning a boolean array在二维数组中查找多个匹配数字并返回一个布尔数组
【发布时间】:2020-09-02 01:06:09
【问题描述】:

我无法创建一个将二维整数数组作为输入的方法。输出将是第二个二维数组,在第一个数组的相应行中具有相同数量的元素,这次元素的类型将是布尔值。输出的值将多次对应于数组中存在的值。

该方法应使用searchForMultiple 方法。

这里我提供了一个例子:

如果inputArray 是 该方法的输出将是以下布尔数组:[[ 4, 9], [ 9, 5, 3]] 由于 9 在输入数组中出现了两次,因此输出中的两个位置都对应于那些 两个实例为真,所有其他值只出现一次,因此它们的值为假,如下所示:[[ false, true ], [ true, false, false]]

代码如下:

class SearchAndPrint{
    public static void main(String[] args){
        int[][] testCase = 
        {{4, 9, 10, 9},
            {5, 4, 7, 10, 11},
            {4, 2}};
        System.out.println("The test case array: ");
        for (int i=0; i<testCase.length; i++){
            for (int j=0; j<testCase[i].length; j++){ 
                System.out.print(testCase[i][j]+" ");
            }
            System.out.println();      
        }        
        boolean[][] founds = gridOfMultiples(testCase);
        System.out.println("Positions with repeated numbers are marked below: ");
        printGrid(founds);
    }
    public static boolean[][] gridOfMultiples(int[][] testCase){
        boolean [][] gridOfMultiples = new boolean[testCase`.length];
        for(int i = 0; i<testCase.length; i++){
            for(int j =0; j<testCase[i].length; j++){
                if(testCase[i][j]==testCase[i][j]){
                    gridOfMultiples[i][j]= true;
                }
                else
                gridOfMultiples[i][j]= false;
            }
        }
    }
    public static boolean searchForMultiple(int[][] inputArray, int search){
    }
    public static void printGrid(boolean[][] inputGrid){
    }
}

【问题讨论】:

    标签: java arrays search boolean 2d


    【解决方案1】:

    似乎您的代码可以像这样简单,不需要searchForMultiple() 方法,这无论如何都会对性能不利。

    public static void main(String[] args) {
        int[][] testCase = { {4, 9, 10, 9},
                             {5, 4, 7, 10, 11},
                             {4, 2} };
        System.out.println(Arrays.deepToString(testCase));
        boolean[][] founds = gridOfMultiples(testCase);
        System.out.println(Arrays.deepToString(founds));
    }
    public static boolean[][] gridOfMultiples(int[][] testCase) {
        Map<Integer, Long> frequency = Stream.of(testCase)
                .flatMapToInt(IntStream::of)
                .boxed()
                .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
        boolean[][] founds = new boolean[testCase.length][];
        for (int i = 0; i < testCase.length; i++) {
            founds[i] = new boolean[testCase[i].length];
            for (int j = 0; j < testCase[i].length; j++)
                founds[i][j] = frequency.get(testCase[i][j]) > 1;
        }
        return founds;
    }
    

    输出

    [[4, 9, 10, 9], [5, 4, 7, 10, 11], [4, 2]]
    [[true, true, true, true], [false, true, false, true, false], [true, false]]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-22
      • 1970-01-01
      • 1970-01-01
      • 2022-01-03
      • 2021-10-21
      • 2011-12-30
      • 1970-01-01
      • 2013-12-14
      相关资源
      最近更新 更多