当前位置: 首页 > article >正文

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

题目

给定一个下标从 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)25*(-9)=1350,这是可以得到的最大实力值。

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

提示

  • 1<=nums.length<=13
  • -9<=nums[i]<=9

解题思路

假设我一个数为 X ,如果这个数是正数,那么想要其乘积最大,则要和一个 尽可能大的正数相乘,如果是一个负数,则要和一个尽可能小的负数或者是0相乘,从上述思路中我们可以推出以下记录值最大值 最小值,这两个值,要想得到这些值则需要注意以下四个值的比较:自生、当前数字、最大值与当前数字相乘、最小值与当前数字相乘

代码

/*
要想乘积最大,对于负数而言要是其变为正数,并且尽可能大,即负值当中的最小值在乘以一个负数
             对于正数而言则是要求,两个值都大

*/
class Solution {
public:
    long long maxStrength(vector<int>& nums) {
        int n=nums.size();
        long long min_num=nums[0];
        long long max_num=nums[0];
         for(int i=1;i<n;i++){
            long long num=nums[i];
            long long t=min_num;
            min_num=min({min_num,num,min_num*num,max_num*num});
            max_num=max({max_num,num,t*num,max_num*num});
         }
         return max_num;
    }
};

http://www.kler.cn/a/289249.html

相关文章:

  • Linux screen和cscope工具使用总结
  • 微信小程序中使用离线版阿里云矢量图标
  • WLAN消失或者已连接但是访问不了互联网
  • JVM 中的完整 GC 流程
  • redis7.x源码分析:(1) sds动态字符串
  • C++ 的协程
  • ADB 获取屏幕坐标,并模拟滑动和点击屏幕
  • 深入理解 JavaScript DOM 操作
  • js处理echarts tooltip定时轮播
  • 一款基于Vue的低代码可视化表单设计器工具,6K star的可视化表单设计器工具,轻松搞定表单,支持多端适配(附源码)
  • 被低估的SQL
  • 基于vue框架的超市管理系统ki6i8(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。
  • 责任链设计模式详解
  • B端系统门门清之:SCRM系统,为客户管理加上社交,如虎添翼
  • MySQL事务处理(TransAction)
  • 苹果11月推出新款M4 Mac:Mac mini设计焕新 MacBook Pro仅例行更新
  • wsl下将Ubuntu从c盘移动到其他盘
  • Linux——IO模型_多路转接(epoll)
  • 监控平台之针对vue,react上报
  • ​yum安装/更新时报错:SyntaxError: invalid syntax​
  • 全局网络代理的使用与选择
  • css的position定位的属性
  • 【Java那些事】关于Git的使用
  • Datawhale X 李宏毅苹果书 AI夏令营|机器学习基础之案例学习
  • Vue -- 总结 02
  • adb大全指令(持续更新)