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

【力扣hot100题】(087)乘积最大子数组

感觉题目越来越难,这题不看答案真的想不到一点。

一开始绕了不少弯路,甚至想将每一个子数组的积全部求出来比较……

答案的方法有点难懂。

方法如下:维护两个数,分别是目前为止最大数和最小数,最大数一般来说是正数,最小数一般来说是负数。(只是一般,有特殊情况)

如果当前数为负数,使得最大数变负数了,或者使最小数变正数了,两者就要“交换”。

而记录两个数组的原因就是风水轮流转,最大数肯定要记录,而谁都不知道后面会不会有负数让最小数一跃升天。

所以这题需要设置两个变量,记录在必须取当前数的情况下,前面子数组乘积的最大数和最小数。

(因为每次只需要用到上一个数的最大数和最小数所以不需要用两个数组记录,两个变量就ok了。)

class Solution {
public:
    int maxProduct(vector<int>& nums) {
        int maxx=nums[0];
        int minn=nums[0];
        int result=nums[0];
        for(int i=1;i<nums.size();i++){
            int m=maxx;
            maxx=max(nums[i],max(maxx*nums[i],minn*nums[i]));
            minn=min(nums[i],min(minn*nums[i],m*nums[i]));
            result=max(result,max(maxx,minn));
        }
        return result;
    }
};

相关文章:

  • LIB-ZC, 一个跨平台(Linux)平台通用C/C++扩展库, 字符集转码/字符集探测
  • IO流——字节输入输出流:FileInputStream FileOutputStream
  • 视频内容原数据获取接口开发指南
  • 直线模组过载使用会有什么效果?
  • 数据驱动的温暖守护:智慧康养平台如何实现 “千人千面” 的精准照护?
  • Python 根据多个下标向列表中插入对应的值的巧妙方法:逆序插入
  • React8+taro开发微信小程序,实现lottie动画
  • 编程规范(c++)
  • ecovadis评分要求,如何提高ecovadis分数,未来展望
  • GitHub 趋势日报 (2025年04月10日)
  • STM32嵌入式开发从入门到实战:全面指南与项目实践
  • 《Vue Router实战教程》19.滚动行为
  • 原生多模态大模型时代:统一感知的智能跃迁
  • Vue 3 国际化实战:支持 Element Plus 组件和语言持久化
  • Git开发
  • 【Java集合】TreeSet、TreeMap源码解读
  • BERT - 直接调用transformers.BertModel, BertTokenizerAPI不进行任何微调
  • C++动态分配内存知识点!
  • vue2使用ezuikit-js播放萤石视频
  • 手撕红黑树
  • 怎么做网站系统/百度seo网站优化 网络服务
  • 洛阳做网站哪家便宜/搜索引擎营销是什么意思
  • flash网站开发用什么语言/怎么样推广自己的店铺和产品
  • 信息门户网站制作费用/新东方烹饪培训学校
  • 上海的公司都有哪些/seo推广工具
  • 山东兴华建设集团有限公司网站拼音/怎么搭建网站