当前位置 博文首页 > 刷题小狂魔的博客:【数组】1464. 数组中两元素的最大乘积(简单

    刷题小狂魔的博客:【数组】1464. 数组中两元素的最大乘积(简单

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

    【题目】
    给你一个整数数组 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
    【代码】

    class Solution {
    public:
        int maxProduct(vector<int>& nums) {
            vector<int> positiveAndZore;
            vector<int> negitive;
            int flag=0;
            for(auto &x:nums){
                x-=1;
                if(x<0)
                    negitive.push_back(x);
                else if(x>0)
                    positiveAndZore.push_back(x);
                else 
                    flag=1;
            }
            int len_pos=positiveAndZore.size(),len_neg=negitive.size();
            sort(positiveAndZore.begin(),positiveAndZore.end());
            sort(negitive.begin(),negitive.end());
            cout<<len_neg<<" "<<len_pos<<endl;
            if(len_pos>=2&&len_neg>=2)
                return max(positiveAndZore[len_pos-1]*positiveAndZore[len_pos-2],
                negitive[len_neg-1]*negitive[len_neg-2]);
            else if(len_pos>=2)
                return positiveAndZore[len_pos-1]*positiveAndZore[len_pos-2];
            else if(len_neg>=2)
                return negitive[len_neg-1]*negitive[len_neg-2];
            else if(flag)
                return 0;
            else    
                return positiveAndZore[0]*negitive[0];
        }
    };
    
    cs
    下一篇:没有了