2708. 一个小组的最大实力值
题目链接:2708. 一个小组的最大实力值
代码如下:
cpp
class Solution
{
public:
long long maxStrength(vector<int>& nums)
{
long long res = 1;
int negativeCnt = 0, positiveCnt = 0, zeroCnt = 0;
int maxNegative = INT_MIN;
for (int i = 0; i < nums.size(); i++)
{
if (nums[i] < 0)
{
negativeCnt++;
res *= nums[i];
maxNegative = max(maxNegative, nums[i]);
}
else if (nums[i] == 0)
{
zeroCnt++;
}
else
{
res *= nums[i];
positiveCnt++;
}
}
//当数组仅有 1 个元素且为负数时,最大积为负数
if (negativeCnt == 1 && zeroCnt == 0 && positiveCnt == 0)
{
return nums[0];
}
//当数组不包含正数,且负数元素小于等于 1 个时,最大积为 0
if (negativeCnt <= 1 && positiveCnt == 0)
{
return 0;
}
//如果乘积为负数,则说明乘积中包含奇数个负数,此时将这个乘积除以最大负数则为最大积
if (res < 0)
{
return res / maxNegative;
}
return res;
}
};