n维数组中找i个最值

题意:给定一个整型数组,在数组中找出由三个数组成的最大乘积,并输出这个乘积。
get:通过本题的接法我们可以发现如何在n维数组中找出最大(小)的i个数,if中将遍历值放在最值位置,后续else if逐个更新!

class Solution {
    
    
    /**
     * 求出数组中最大的三个数以及最小的两个数
     *
     * @param nums
     * @return
     */
    public int maximumProduct(int[] nums) {
    
    
        int min1 = Integer.MAX_VALUE, min2 = min1; // 更新两个最小值
        int max1 = Integer.MIN_VALUE, max2 = max1, max3 = max1; // 更新三个最大值
        for (int n : nums) {
    
    
            if (n <= min1) {
    
    
                min2 = min1;
                min1 = n; // 最小值
            } else if (n <= min2) {
    
         // n lies between min1 and min2
                min2 = n;
            }
            if (n >= max1) {
    
                // n is greater than max1, max2 and max3
                max3 = max2;
                max2 = max1;
                max1 = n; // 最大值
            } else if (n >= max2) {
    
         // n lies betweeen max1 and max2
                max3 = max2;
                max2 = n;
            } else if (n >= max3) {
    
         // n lies betwen max2 and max3
                max3 = n;
            }
        }
        return Math.max(min1 * min2 * max1, max1 * max2 * max3);
    }
}

猜你喜欢

转载自blog.csdn.net/for62/article/details/108567812