题目:2708. 一个小组的最大实力值
方法一:枚举、位运算。数组nums的长度最多为13,这里我们考虑每个元素选或不选的两种情况,时间复杂度为0(2^13)。
class Solution {
public:
long long maxStrength(vector<int>& nums) {
int n=nums.size();
long long mx=nums[0];
for(int i=1;i<(1<<n);i++){
long long t=1;
for(int j=0;j<n;j++){
if(i>>j&1) t=t*nums[j];
}
mx=max(mx,t);
}
return mx;
}
};
方法二:维护选中的元素里累乘的最大值mx和最小值mn。遍历数组nums的每一个元素t,来更新mx和mn。
更新mx的可能情况为:t,mxt,mnt
更新mn的可能情况为:t,mxt,mnt
最后返回结果为mx,时间复杂度为0(n)。
class Solution {
public:
long long maxStrength(vector<int>& nums) {
long long mx=nums[0],mn=nums[0];
for(int i=1;i<nums.size();i++){
long long t=nums[i];
long long tmp=mx;
mx=max({mx,t,mx*t,mn*t});
mn=min({mn,t,tmp*t,mn*t});
}
return mx;
}
};