查找数组最大值五种方式

例如查询公司员工的最高薪资,以及班级的最高成绩又或者是面试中都会遇到查找最大值的问题,所以本文我们就来列举一下查询数组中最大值的 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流的方式操作代码简洁

猜你喜欢

转载自blog.csdn.net/lirui1212/article/details/109121743