2708. 一个小组的最大实力值

简介: 【9月更文挑战第2天】

给你一个下标从 0 开始的整数数组 nums ,它表示一个班级中所有学生在一次考试中的成绩。老师想选出一部分同学组成一个 非空 小组,且这个小组的 实力值 最大,如果这个小组里的学生下标为 i0, i1, i2, ... , ik ,那么这个小组的实力值定义为 nums[i0] nums[i1] nums[i2] ... nums[ik​] 。

请你返回老师创建的小组能得到的最大实力值为多少

示例 1:

输入:nums = [3,-1,-5,2,5,-9]
输出:1350
解释:一种构成最大实力值小组的方案是选择下标为 [0,2,3,4,5] 的学生。实力值为 3 (-5) 2 5 (-9) = 1350 ,这是可以得到的最大实力值。
示例 2:

输入:nums = [-4,-5,-4]
输出:20
解释:选择下标为 [0, 1] 的学生。得到的实力值为 20 。我们没法得到更大的实力值。

提示:

1 <= nums.length <= 13
-9 <= nums[i] <= 9
题解:
直接暴力跑一遍把所有非零数相乘即可判断正负,就是有些地方需要注意:

  1. 如果数组中只有一个数。不管正负都需要范围他,因为题目中说了非空。
  2. 如果全零,也要返回零。
  3. 如果是有一个负数,其余全是零,那么就应该返回0。选零要比选负数大。
  4. 如果积为负数,那么一定要除最小的负数。
class Solution {
public:
    long long maxStrength(vector<int>& nums) {
        long long ans = 1;
        sort(nums.begin(),nums.end());
        int tmp=1;
        for(int i = 0;i<nums.size();i++){
            if(nums[i]>0){
                ans=ans*nums[i];                
            }else if(nums[i]<0){
                ans=ans*nums[i];
                tmp=nums[i];   
            }
        }
        if (nums.size()==1) return nums[0];
        if(nums[0]==0&&nums[nums.size()-1]==0) return 0;
        if(nums[0]<0){
            if(nums.size()>=2){
                if(nums[1]==0&&nums[nums.size()-1]==0) return 0;
            }
            else return nums[0];
        }
        if (ans<0){
            ans=ans/tmp;            
        }
        return ans;
    }
};
AI 代码解读
iamzfh
+关注
目录
打赏
0
1
1
0
48
分享
相关文章
CEO和CMO的关系及其对企业成长的影响
CEO和CMO的关系及其对企业成长的影响
周末荐书 | 重塑组织:进化型组织的创建之道
《重塑组织》提出了一种新的组织模式——进化型青色组织。青色组织突破了橙色组织等同于机器、绿色组织等同于家庭的弊端,将组织构建为一个有机的生命系统,一方面能够实现自主管理、灵活进化,驱动真实自我不断地成长;另一方面,又能避免过度讲求感性、多元、感觉行事的弊端,切实提高决策的水平。
1178 0

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等