LeetCode1464. 数组中两元素的最大乘积-JAVA

题目

给你一个整数数组 nums,请你选择数组的两个不同下标 i 和 j,使 (nums[i]-1)*(nums[j]-1) 取得最大值。请你计算并返回该式的最大值。

示例 1:
输入:nums = [3,4,5,2]
输出:12 
解释:如果选择下标 i=1 和 j=2(下标从 0 开始),则可以获得最大值,(nums[1]-1)*(nums[2]-1) = (4-1)*(5-1) = 3*4 = 12 。 

提示:
2 <= nums.length <= 500
1 <= nums[i] <= 10^3

解法1:

直接用Array.sort()方法对数组排序
class Solution {
    public int maxProduct(int[] nums) {
        Arrays.sort(nums);
        return (nums[nums.length-1]-1)*(nums[nums.length-2]-1);
    }
}

解法2:

从左到右遍历,维护最大值和次最大值
	class Solution {
    public int maxProduct(int[] nums) {
        int a = nums[0], b = nums[1], temp = 0;
        if (a < b) {
            temp = a;
            a = b;
            b = temp;
        }
        for (int i = 2; i < nums.length; i++) {
            if (nums[i] > a) {
                b = a;
                a = nums[i];
            } else if (nums[i] > b) {
                b = nums[i];
            }
        }
        return (a - 1) * (b - 1);
    }
}
posted @ 2022-08-26 19:36  日报初级开发工程师  阅读(12)  评论(0)    收藏  举报  来源