当前位置 博文首页 > StudyWinter的博客:【LeetCode刷题】1464. 数组中两元素的最大

    StudyWinter的博客:【LeetCode刷题】1464. 数组中两元素的最大

    作者:[db:作者] 时间:2021-09-03 18:14

    给你一个整数数组?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 = [1,5,4,5]

    输出:16

    解释:选择下标 i=1 和 j=3(下标从 0 开始),则可以获得最大值 (5-1)*(5-1) = 16

    示例 3:

    输入:nums = [3,7]

    输出:12

    提示:

    • 2 <= nums.length <= 500
    • 1 <= nums[i] <= 10^3

    ==============================================================================================================================================================================================================================================================================================================================================================================================

    分析:

    法一:先排序,再找最大值和第二大值,效率不高

    class Solution {
        public int maxProduct(int[] nums) {
            Arrays.sort(nums);
            return (nums[nums.length-1]-1)*(nums[nums.length-2]-1);
        }
    }

    ?

    法二:遍历数组,找出最大值和第二大值

    class Solution {
        public int maxProduct(int[] nums) {
            int first = Integer.MIN_VALUE;     //第一大值
            int second = Integer.MIN_VALUE;    //第二大值
    
            for(int data:nums){
                if(data > first){
                    second = first;
                    first = data;
                }else if(data <= first && data > second){    //=的目的是处理重复的最大值
                    second = data;
                }
            }
            return (first - 1) * (second -1);
    
        }
    }

    参考:https://leetcode-cn.com/problems/maximum-product-of-two-elements-in-an-array/

    cs