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循环的实现相比,它可能更难阅读,但可以并行工作. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- java.io.Console – 与stdin重定向兼容的实用程序?
- CCPC-Wannafly & Comet OJ 夏季欢乐赛(2019)D
- 觉的Java开发新手问题总结
- java – @SuppressWarnings注释的优点
- HiDPI支持java 9,使用Windows L&F的JTable网格线的scal
- 第八周课程总结&实验报告(六)
- java – 为什么首先强制转换为Closeable?
- java – 在这种情况下如何避免ArrayIndexOutOfBoundsExcept
- java使用Hashtable过滤数组中重复值的方法
- 在openlayers中更改feature.vector的外观