当前位置: 首页 > 知识库问答 >
问题:

我如何简化/结合这两种方法来寻找一个数组中最小和最大的int?

宇文兴言
2023-03-14

我已经编写了两种方法来查找数组中最小和最大的 int,但它们几乎相同,所以我觉得应该有一些方法来简化它,也许作为一种方法?

private int findMin(){
    int min = arr[0];
    for(int num : arr){
        if(num<min) {
            min = num;
        }
    }
    return min;
}

private int findMax(){
    int max = arr[0];
    for(int num : arr){
        if(num>max){
            max = num;
        }
    }
    return max;
}

我不知道如何处理这类问题,所以我很想看看你的回应!

虽然这个关于如何将算术运算符传递给方法的问题和这个关于如何获得Java 8流的最小值和最大值的问题回答了字面上的编程问题,但我的问题是关于如何处理做类似事情的方法的问题,以及一般比较数组的方法。这篇文章的答案比那些问题的答案对我更有帮助。

共有3个答案

印成天
2023-03-14

您的方法已经在 IntStream 中可用,它也处理空数组(不确定的极值)。

private OptionalInt findMin() {
    return IntStream.of(arr).min();
}

private OptionalInt findMax() {
    return IntStream.of(arr).max();
}

就像你选择抛出异常一样:

private int findMin() {
    return IntStream.of(arr).min().get();
}

private int findMax() {
    return IntStream.of(arr).max().get();
}

或作为方法参考:

Function<IntStream, OptionalInt> extreme = IntStream::max;

还要考虑并行特性:

IntStream.of(arr).parallel().min();

@Yay295提醒我们注意< code > IntSummaryStatistics :

IntSummaryStatistics stat = new IntSummaryStatistics();
IntStream.of(arr).stream()
    .forEach(stats); // stats is an int consumer too.

或做更多事情时

IntSummaryStatistics stats = IntStream.of(arr)
    .collect(Collectors.summarizingInt(IntSummaryStatistics::new,
                    IntSummaryStatistics::accept, 
                    IntSummaryStatistics::combine);

然后可以问几个数字:

int min = stats.getMin();
int max = stats.getMax();
int avg = stats.getAverage();
int sum = stats.getSum();
融泓
2023-03-14

我不建议将两种责任合并成一种方法

相反,我会创建两个方法(max和min),通过第三个方法共享相同的代码行。

public int min(int[] array){
    return most(array, (a, b) -> a < b)
}

public int max(int[] array){
    return most(array, (a, b) -> a > b)
}

private int most(int[] array, Fuction2 compare){
    int most = array[0];
    for (int num : array) {
        if (compare(num, most)) {
            most = num;
        }
    }
    return most;
}

通过这种方式,您可以轻松地更改一个方法的逻辑,而无需更改另一个方法。此外,与使用一个参数为“max=true”的方法相比,它更易于使用,可读性更强

马承
2023-03-14

您可以只实现一个,比如findMax,并传递给它一个比较器,指示应该如何进行比较:

private int findMax(Comparator<Integer> comparator) {
    int max = arr[0];
    for (int num : arr) {
        if (comparator.compare(num, max) > 0) {
            max = num;
        }
    }
    return max;
}

通过<code>比较器。naturalOrder()用于整数的自然排序,因此可以获得最大值。

传递< code > comparator . reverse order()进行反向排序,这样可以得到最小值。

 类似资料:
  • 我写了两个方法来查找数组中最小和最大的int,但它们几乎完全相同,所以我觉得应该有一些方法来简化这一点,也许是一种方法? 我不知道如何处理此类问题,所以我很想看到您的回复! 编辑:虽然这个关于如何将算术运算符传递给一个方法的问题和这个关于如何获得Java 8流的最小值和最大值的问题回答了文字编程问题,但我的问题是关于如何处理方法做类似事情的问题,以及一般比较数组的方法。这篇帖子的答案比那些问题的答

  • 本文向大家介绍寻找一数组中前K个最大的数相关面试题,主要包含被问及寻找一数组中前K个最大的数时的应答技巧和注意事项,需要的朋友参考一下 考察点:数组    

  • 我正在制作一个数组,它从1-100生成随机数。然后,在最后,我将从列表中输出最大值和最小值。但是,我不知道如何找到/调用max和min,我尝试使用math方法函数(如math.min()),但我认为它对数组不起作用。这是我的代码(下划线是我想要调用最大值和最小值的地方,但我不知道如何调用)。 }

  • 我有一个熊猫数据框,有两列,一列是温度,另一列是时间。 我想做第三和第四列,叫做最小和最大。这些列中的每一个都将填充nan's,除非有一个局部min或max,那么它将具有该极值的值。 这里是一个数据的样本,本质上我试图识别图中所有的峰值和低点。 有没有内置的熊猫工具可以做到这一点?

  • 主要内容:普通算法,分治算法程序中,我们经常使用数组(列表)存储给定的线性序列(例如 {1,2,3,4}),那么如何查找数组(序列)中的最大值或者最小值呢? 查找数组(序列)中最大值或最小值的算法有很多,接下来我们以 {3,7,2,1} 序列为例讲解两种查找最值的算法,一种是普通算法,另一种是借助 分治算法解决。 普通算法 普通算法的解决思路是:创建两个变量 max 和 min 分别记录数组中的最大值和最小值,它们的初始值都

  • 子数组包含正数和负数。你必须找到一个最大和子数组,使子数组的长度大于或等于k。 下面是我用C++编写的使用Kadane算法的代码。 我的代码工作得很好,但很慢,我想不出任何方法来改进我的代码。我也读过这个问题,找到最长的子数组,它的和可以被K整除,但这不是我想要的,长度也可以大于K。