zoukankan      html  css  js  c++  java
  • LeetCode 每日一题 152. 乘积最大子数组

    给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。

    示例 1:

    输入: [2,3,-2,4]
    输出: 6
    解释: 子数组 [2,3] 有最大乘积 6。

    示例 2:

    输入: [-2,0,-1]
    输出: 0
    解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/maximum-product-subarray
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。


    在编程语言选 C++ ,可以清楚看到返回为 int 。说明数据范围小(最多连续 31 个 2),那么可以暴力搞。
    注意要对 1 和 -1 特判,预先减少输入数组的长度即可。

    class Solution {
     public:
      int maxProduct(vector<int>& nnums) {
        vector<int>nums;
        bool has_one = false;
        for(int i : nnums) {
          if(i == 1) {
            if(!has_one)
              nums.push_back(i);
            has_one = true;
            continue;
          }
          if(i == -1 && nums.size() > 1 && nums[nums.size() - 1] == nums[nums.size() - 2] && nums[nums.size() - 1] == -1)
            continue;
          nums.push_back(i);
        }
        /*预处理 nums 如上方代码所示*/
    
        const int n = nums.size();
        cout << n << "
    ";
        for(int i : nums)
          cout << i << " ";
        cout << endl;
        int ans(INT_MIN);
        for(int p = 0; p < n; ++p) {
          for(int q = p; q < n; ++q) {
            int t = 1;
            for(int k = p; k <= q && t; ++k)
              t *= nums[k];
            ans = max(ans, t);
          }
        }
        return ans;
      }
    };
    
  • 相关阅读:
    实现servlet的三种方式
    java中的运算符与表达式
    封装链接数据库的工具
    java 概述
    HTTP请求方式中get和post的区别
    asp.net获取当前网址url
    利用IP安全策略关闭危险端口
    IE6 css fixed
    存储过程中使用事务详解
    windows 2003内存性能分析工具
  • 原文地址:https://www.cnblogs.com/Forgenvueory/p/12908768.html
Copyright © 2011-2022 走看看