当前位置 博文首页 > 刷题小狂魔的博客:【数组】1464. 数组中两元素的最大乘积(简单
【题目】
给你一个整数数组 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