检查数组中最大和最小元素的数量

时间:2015-08-16 16:57:41

标签: java

我正在尝试检查给定数组是否具有相同数量的最大和最小数组元素。如果它们的数量相等则应返回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;
    }
}
}

3 个答案:

答案 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;
}