加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 从数组中查找第二个min元素

发布时间:2020-12-15 08:26:53 所属栏目:Java 来源:网络整理
导读:任何人都可以在 Java函数样式(lambda)中转换它: public int findSecondMin(int arr[]) { int min = Integer.MAX_VALUE,secondMin = Integer.MAX_VALUE; for (int i = 0; i arr.length; i++) { if (min arr[i]) { secondMin = min; min = arr[i]; } else if
任何人都可以在 Java函数样式(lambda)中转换它:

public int findSecondMin(int arr[]) {

    int min = Integer.MAX_VALUE,secondMin = Integer.MAX_VALUE;
    for (int i = 0; i < arr.length; i++) {
        if (min > arr[i]) {
            secondMin = min;
            min = arr[i];
        } else if (secondMin > arr[i]) {
            secondMin = arr[i];
        }
    }
    return secondMin;
}

我试过通过应用过滤器,但它不起作用.

解决方法

使用IntStream,您可以轻松地对其进行排序并跳过第一个元素:

public int findSecondMin(int[] arr)
{
    return IntStream.of(arr).sorted().skip(1).findFirst().orElse(Integer.MAX_VALUE);
}

但是,当然,您不必使用流. java.util.Arrays有一个很好的排序方法,然后你可以采取第二个元素:

public int findSecondMin(int[] arr)
{
    Arrays.sort(arr);
    return arr.length < 2 ? Integer.MAX_VALUE : arr[1];
}

为了避免对整个数组进行排序,我们可以采用您的方法并将其调整为流中的自定义缩减:

public int findSecondMin(int[] arr)
{
    return IntStream.of(arr).boxed().reduce(
        new int[] {Integer.MAX_VALUE,Integer.MAX_VALUE},(mins,i) -> {
            return new int[] {Math.min(i,mins[0]),Math.min(Math.max(i,mins[1])};
        },(mins1,mins2) -> {
            int[] lesser = mins1[0] < mins2[0] ? mins1 : mins2;
            int[] larger = mins1[0] < mins2[0] ? mins2 : mins1;
            return new int[] {lesser[0],Math.min(lesser[1],larger[0])};
        }
    )[1];
}

与基于for循环的实现相比,它可能更难阅读,但可以并行工作.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读