Java 从二维整数数组中查找最常用的值
我正在从2D数组中查找最常见的值以及它出现的次数。我试过这个解决方案,但不起作用。我试着搜索,但找不到合适的例子。请帮我解决这个问题 这是我的密码: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
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);
}