我正在尝试检查给定数组是否具有相同数量的最大和最小数组元素。如果它们的数量相等则应返回1,否则返回0.但不是哪个返回总是为零。
你能帮我吗?
public class MaxMinEqual {
public static void main(String[] args) {
System.out.println(MaxMinEqual.ismaxminequal(new int[]{11, 4, 9, 11, 8, 5, 4, 10}));
System.out.println(MaxMinEqual.ismaxminequal(new int[]{11, 11, 4, 9, 11, 8, 5, 4, 10}));
}
public static int ismaxminequal(int[] a) {
int maxcount = 0;
int mincount = 0;
int largest = a[0];
for (int i = 0; i < a.length; i++) {
if (a[i] > largest) {
largest = a[i];
}
if (a[i] == largest) {
maxcount = maxcount + 1;
}
}
int smallest = a[0];
for (int j = 0; j < a.length; j++) {
if (a[j] < smallest) {
smallest = a[j];
}
if (a[j] == smallest) {
mincount = mincount + 1;
}
}
if (maxcount == mincount) {
return 1;
} else {
return 0;
}
}
}
答案 0 :(得分:1)
当您找到更大或更小的值时,您没有重置maxcount和mincount。
{{1}}
答案 1 :(得分:1)
不确定您是否应该在没有数据结构的情况下学习这一点,但为什么不利用称为预分类的算法效率技术。
我们可以这样做:
public static int ismaxminequal(int[] a) {
Arrays.sort(a);
这将最小元素放在数组的“头部”,将最大元素放在“尾部”。
所以,现在,我们必须从两端进行迭代,看看有多少可用(最大和最小)。
int num_min = 1;
int num_max = 1;
int cur_value = 0; //holds a reference for comparison
cur_value = a[0];
for (int i = 1; i < a.length; i++) {
if (a[I] == cur_value)
num_min++;
else
break;
}
cur_value = a[a.length - 1];
for (int i = a.length - 1; i > 0; I--) {
if (a[I] == cur_value)
num_min++;
else
break;
}
if (num_max == num_min) {
return 1;
} else {
return 0;
}
}
}
答案 2 :(得分:0)
Java 8方式。非常易读且使用大型数组可以更快地实现O(N)单线程实现。
public boolean isMaxMinEqual(int[] a) {
int max = Arrays.stream(a).parallel().max().getAsInt();
int min = Arrays.stream(a).parallel().min().getAsInt();
long maxCount = Arrays.stream(a).parallel().filter(s -> s == max).count();
long minCount = Arrays.stream(a).parallel().filter(s -> s == min).count();
return maxCount == minCount;
}