Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从二维整数数组中查找最常用的值_Java_Arrays - Fatal编程技术网

Java 从二维整数数组中查找最常用的值

Java 从二维整数数组中查找最常用的值,java,arrays,Java,Arrays,我正在从2D数组中查找最常见的值以及它出现的次数。我试过这个解决方案,但不起作用。我试着搜索,但找不到合适的例子。请帮我解决这个问题 这是我的密码: private void commonElevation(int[][] data) { for (int i = 0; i < data.length; i++) { for (int j = 0; j < data[i].length; j++) { if (i + 1 < da

我正在从2D数组中查找最常见的值以及它出现的次数。我试过这个解决方案,但不起作用。我试着搜索,但找不到合适的例子。请帮我解决这个问题

这是我的密码:

private void commonElevation(int[][] data) {
    for (int i = 0; i < data.length; i++) {
        for (int j = 0; j < data[i].length; j++) {
            if (i + 1 < data.length) {
                if (data[i][j] == data[i + 1][j]) {
                    System.out.println(data[i][j] + " = " + data[i + 1][j]);
                }
            }
        }
    }
}
private void commonElevation(int[][]数据){
对于(int i=0;i
您可以使用:

考虑到新的约束条件,蛮力方法将起作用:

// find the maximum
int value = 0, max = Integer.MIN_VALUE;
for (int i = 0; i < data.length; i++) {
    for (int j = 0; j < data[i].length; j++) {

        // search for counts
        int currentCount = 0;
        for (int k = 0; k < data.length; k++) {
            for (int l = 0; l < data[k].length; l++) {
                if(data[k][l] == data[i][j]) {
                    currentCount++;
                }
            }
        }

        if (currentCount > max) {
            value = data[i][j];
            max = currentCount;
        }
    }
}

System.out.println(value + "=" + max);

基本上,对所有值进行iter,并计算每个值的外观。这种方法(暴力)效率非常低。

一种可能是使用哈希映射跟踪值以及每次发生的次数:

private void commonElevation(int[][] data) {
    Map<Integer, Integer> counts = new HashMap<>();

    for (int i=0; i < data.length; i++) {
        for (int j=0; j < data[i].length; j++) {
            int count = counts.get(data[i][j]) == null ? 0 : counts.get(data[i][j]);
            counts.put(data[i][j], ++count);
        }
    }

    int frequent = Integer.MIN_VALUE;
    for (Integer value : counts.values()) {
        if (value > frequent) frequent = value;
    }

    System.out.println("most frequent value is: " + frequent);
}
private void commonElevation(int[][]数据){
映射计数=新的HashMap();
对于(int i=0;i频繁)频繁=值;
}
System.out.println(“最频繁值为:“+frequent”);
}

谢谢@Daniel,但这是我的大学作业,我只能用数组和for循环来解决这个问题。@arpittatel你能用
HashMap
来存储计数吗?对不起,不行,我只能用数组。@arpittatel如果你只能用数组和循环,我建议你对数据进行排序,在连续排序排序中,每一个值出现多少次可能不被允许,对于初学者来说,你不能只打印在循环的中间。当然,在过早调用最频繁的内容之前,您至少需要检查每个元素。根据您的所有需求,最好的方法是只写4个循环——对于每个元素(外部两个循环),计算其在整个网格中的频率,并将其与最佳(内部两个循环)进行比较。您可以使用一个计数器数组,每个整数有一个bucket,但这会破坏效率,除非数据量很大。
// find the maximum
int value = 0, max = Integer.MIN_VALUE;
for (int i = 0; i < data.length; i++) {
    for (int j = 0; j < data[i].length; j++) {

        // search for counts
        int currentCount = 0;
        for (int k = 0; k < data.length; k++) {
            for (int l = 0; l < data[k].length; l++) {
                if(data[k][l] == data[i][j]) {
                    currentCount++;
                }
            }
        }

        if (currentCount > max) {
            value = data[i][j];
            max = currentCount;
        }
    }
}

System.out.println(value + "=" + max);
2=4
private void commonElevation(int[][] data) {
    Map<Integer, Integer> counts = new HashMap<>();

    for (int i=0; i < data.length; i++) {
        for (int j=0; j < data[i].length; j++) {
            int count = counts.get(data[i][j]) == null ? 0 : counts.get(data[i][j]);
            counts.put(data[i][j], ++count);
        }
    }

    int frequent = Integer.MIN_VALUE;
    for (Integer value : counts.values()) {
        if (value > frequent) frequent = value;
    }

    System.out.println("most frequent value is: " + frequent);
}