zoukankan      html  css  js  c++  java
  • 152. Maximum Product Subarray

    一、题目

      1、审题

      

      2、分析

        求一个整数数组中的连续子串的最大乘积。

    二、解答

      1、思路:

          ①、遍历数组,采用三个变量进行记录。

              maxCurProduct:包含当前下标的数组元素时的最大乘积。

              minCurProduct: 包含当前下标的数组元素时的最小乘积。

              product:   当前为止的最大乘积。

          ②、因为数组中可能存在负数,而 负数乘以越小的数乘积越大。故当 arr[i] < 0 时,交换 maxCurProduct 与 minCurProduct 值。

        public int maxProduct(int[] nums) {
            if(nums.length == 0)
                return 0;
            int product = nums[0];
            int minCurProduct = nums[0]; // 到当前元素位置 max
            int maxCurProduct = nums[0]; // 到当前位置 min
            for (int i = 1; i < nums.length; i++) {
                
                if(nums[i] < 0) {
                    // num[i] < 0, 则 curProduct 越小,乘积越大
                    int tmp = minCurProduct;
                    minCurProduct = maxCurProduct;
                    maxCurProduct = tmp;
                }
                    
                maxCurProduct = Math.max(nums[i], maxCurProduct * nums[i]);
                minCurProduct = Math.min(nums[i], minCurProduct * nums[i]);
                
                product = Math.max(product, maxCurProduct);
            }
            return product;
        }
  • 相关阅读:
    进程&线程
    PLAN
    Note-Virus
    编译器 CL.EXE / RC.EXE
    windows API
    centos6.5系统中yum命令出错
    VMware Workstation10 下安装 CentOS6.5( 安装图文教程 )
    Linux下网络能ping通地址 但是ping不通域名
    MySQL数据库优化的八种方式(经典必看)
    Java中常见的对象类型简述(DO、BO、DTO、VO、AO、PO)
  • 原文地址:https://www.cnblogs.com/skillking/p/9782406.html
Copyright © 2011-2022 走看看