首页 > 编程知识 正文

查找数组最大值五种方式是什么,数组找出最大值

时间:2023-05-05 09:25:04 阅读:259054 作者:138

例如查询公司员工的最高薪资,以及班级的最高成绩又或者是面试中都会遇到查找最大值的问题,所以本文我们就来列举一下查询数组中最大值的 5 种方法。 1.for循环方式

for循环方式手动定义一个最大值,循环比较,如果数组的某一个元素比最大值还要大,就将这个数组元素作为最大值
比如说定义的最大值是0 现在开始循环 数组下标为0的第一个元素2 大于0 此时将2作为最大值,依次类推,循环结束,就查找到最大值

public static void main(String[] args) { int[] arr = {2, 8, 19, 3, 98, 12}; int max = findArrayMax_value(arr); System.out.println("最大值:" + max);} public static int findArrayMax_value(int[] arr) { //手动定义一个最大值 int max = 0; //循环遍历 for (int ele : arr) { //判断数组中每一个元素和最大值的关系 if (ele > max){ //如果数组元素大 就赋值给max max = ele; } }=============== 一般使用增强for循环 ======================= for (int i = 0; i < arr.length; i++) { if (arr[i] > max) { max = arr[i]; } } return max; }

结果:最大值:98

2.递归方式 使用递归需要定义两个位置 初始位置和结束位置 如果初始位置的值大于结束位置的值 结束位置向前移一位 继续调用 如果初始位置的值小于结束位置的值 初始位置向后移一位 继续调用 直到初始位置和结束位置重合结束 比如:现在数组中初始位置的元素下标为0的第一个元素2 和 结束位置下标为arr.length-1的第六个元素比较 此时初始位置的值小于结束位置的值所以执行语句 max=arr[last] 继续调用方法 这次调用形参就发生了改变 应该是第二个元素和结束位置的值比较,所以初始位置向后移一位 public static void main(String[] args) { int[] arr = {2, 8, 19, 3, 98, 12}; //实参分别是数组、初始位置、结束位置、最大值 int max2 = findArrayMax_value2(arr, 0, arr.length - 1, max); System.out.println("最大值:" + max2);} public static int findArrayMax_value2(int[] arr, int head, int last, int max) { //初始位置与结束位置相等 if (arr[head] == arr[last]) { return max; } else { //初始位置大于结束位置 if (arr[head] > arr[last]) { //arr[head]赋值给max max = arr[head]; //继续执行方法 此时结束位置应该向前移一位 继续和初始位置的值比较 return findArrayMax_value2(arr, head, last - 1, max); } else { //如果初始位置小于结束位置 arr[last]赋值给max max = arr[last]; //继续执行方法 此时初始位置应该向后移一位,继续和结束位置的值比较 return findArrayMax_value2(arr, head + 1, last, max); } } }

结果:最大值:98

3.Arrays.sort()方式

Arrays.sort 方法可以将数组从小到大进行排序,排序完成之后,取最后一位的值就是最大值了,实现代码如下:

public static void main(String[] args) { int[] arr = {2, 8, 19, 3, 98, 12}; int max3= findArrayMax_value2(arr); System.out.println("最大值:" + max3); } public static int findArrayMax_value3(int[] arr) { /** * 源码: * public static void sort(int[] a) { * //定义初始位置和结束位置 * DualPivotQuicksort.sort(a, 0, a.length - 1, null, 0, 0); * } */ //返回的是一个升序的数组 Arrays.sort(arr); //返回结束位置 也就是最大值 return arr[arr.length - 1]; }

核心语句

for (int i = left, j = i; i < right; j = ++i) { int ai = a[i + 1]; while (ai < a[j]) { a[j + 1] = a[j]; if (j-- == left) { break; } } a[j + 1] = ai; }

结果:最大值:98

4.Stream流

JDK1.8新特性引入Stream操作起来容易
使用Stream三步骤:
创建流
中间操作
终止操作

public static void main(String[] args) { int[] arr = {2, 8, 19, 3, 98, 12}; int max4= findArrayMax_value2(arr); System.out.println("最大值:" + max4); } public static int findArrayMax_value4(int[] arr) { return Arrays.stream(arr).max().getAsInt(); }

结果:最大值:98

5.Collections.max()

使用 Collections 集合工具类也可以查找最大值和最小值,但在使用之前我们想要将数组(Array)转换成集合(List),实现代码如下:
使用org.apache.commons.lang3.ArrayUtils.toObject 需要导入下面的依赖

<dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.5</version> </dependency> public static void main(String[] args) { int[] arr = {2, 8, 19, 3, 98, 12}; int max5= findArrayMax_value2(arr); System.out.println("最大值:" + max5); } public static int findArrayMax_value5(int[] arr) { List<Integer> list = Arrays.asList(org.apache.commons.lang3.ArrayUtils.toObject(arr)); return Collections.max(list); }

结果:最大值:98

推荐使用stream流的方式操作代码简洁

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。