问题描述:
- 给定一个整数数组
nums
,选择数组的两个不同下标i
和j
使(nums[i]-1)*(nums[j]-1)
取得最大值,计算并返回该式的最大值。
核心思路:
- 单次遍历维护最大值和次大值即可。
代码实现:
class Solution
{
public:
int maxProduct(vector<int>& nums)
{
int id = -1, iid = -1; // id 为最大值索引,iid 为次大值索引
int cur;
for(int i = 0; i < nums.size(); ++i)
{
cur = i;
if(id == -1 or nums[id] < nums[cur]) // 先与最大值比较
swap(cur, id);
if(cur != -1 and (iid == -1 or nums[iid] < nums[cur])) // 接着与次大值比较
swap(cur, iid);
}
return (nums[id]-1)*(nums[iid]-1);
}
};