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

福大大 答案2021-10-18:

动态规划。
情况1.i位置。[i]。
情况2.i位置向左扩。[i]*dp[i-1]。dp[i-1]是最大累乘积。
情况3.i位置向左扩。[i]*dp[i-1]。dp[i-1]是最小累乘积。
时间复杂度:O(N)。
空间复杂度:O(1)。

代码用golang编写。代码如下:

package main

import (
"fmt"
"math"
) func main() {
arr := []int{2, 3, -2, 4}
ret := maxProduct(arr)
fmt.Println(ret)
} func max(arr []float64) float64 {
if len(arr) == 0 {
return 0 // 报错!
}
n := len(arr)
// 上一步的最大
premax := arr[0]
// 上一步的最小
premin := arr[0]
ans := arr[0]
for i := 1; i < n; i++ {
p1 := arr[i]
p2 := arr[i] * premax
p3 := arr[i] * premin
curmax := math.Max(math.Max(p1, p2), p3)
curmin := math.Min(math.Min(p1, p2), p3)
ans = math.Max(ans, curmax)
premax = curmax
premin = curmin
}
return ans
} func maxProduct(nums []int) int {
ans := nums[0]
min := nums[0]
max := nums[0]
for i := 1; i < len(nums); i++ {
curmin := getMin(nums[i], getMin(min*nums[i], max*nums[i]))
curmax := getMax(nums[i], getMax(min*nums[i], max*nums[i]))
min = curmin
max = curmax
ans = getMax(ans, max)
}
return ans
}
func getMax(a int, b int) int {
if a > b {
return a
} else {
return b
}
}
func getMin(a int, b int) int {
if a < b {
return a
} else {
return b
}
}

执行结果如下:
图片


左神java代码

2021-10-18:乘积最大子数组。给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。力扣152。的更多相关文章

  1. 给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标。

    /** * 给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标. * * 你可以假设每种输入只会对应一个答案.但是,数组中 ...

  2. 【Java】 剑指offer(1) 找出数组中重复的数字

    本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 在一个长度为n的数组里的所有数字都在0到n-1的范围内.数组中某些数字 ...

  3. 【剑指offer】找出数组中任意重复的数字(不修改数组),C++实现

    原创博文,转载请注明出处! # 题目 在一个长度为n+1的数组里的所有数字都在1~n的范围内,所以数组中至少有一个数字是重复的.请找出数组中任意一个重复的数字,但不能修改输入的数组.例如,如果输入长度 ...

  4. [LeetCode] Find All Numbers Disappeared in an Array 找出数组中所有消失的数字

    Given an array of integers where 1 ≤ a[i] ≤ n (n = size of array), some elements appear twice and ot ...

  5. 整数数组的定义,然后输入一个整数X,假定X不在这个数组,返回小于X位置的最大数目i而超过X位置的最小数目j

    //整数数组的定义,然后输入一个整数x,假定X不在这个数组,返回小于X位置的最大数目i而超过X位置的最小数目j: //如果X在该阵列,返回位置的阵列中的数. 资源: #include<iostr ...

  6. 剑指offer.找出数组中重复的数字

    题目: 给定一个长度为 n 的整数数组 nums,数组中所有的数字都在 0∼n−1 的范围内.数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次.请找出数组中任意一个重复的数 ...

  7. AcWing 13. 找出数组中重复的数字

    习题地址 https://www.acwing.com/solution/acwing/content/2919/. 题目描述给定一个长度为 n 的整数数组 nums,数组中所有的数字都在 0∼n−1 ...

  8. 一起来刷《剑指Offer》-- 题目一:找出数组中重复的数字(Python多种方法实现)

    数组中重复的数字 最近在复习算法和数据结构(基于Python实现),然后看了Python的各种"序列"--比如列表List.元组Tuple和字符串String,后期会写一篇博客介绍 ...

  9. 《剑指offer》第三_一题(找出数组中重复的数字,可改变数组)

    // 面试题3(一):找出数组中重复的数字 // 题目:在一个长度为n的数组里的所有数字都在0到n-1的范围内.数组中某些数字是重复的,但不知道有几个数字重复了, // 也不知道每个数字重复了几次.请 ...

  10. 【Offer】[3-1] 【找出数组中重复的数字】

    题目描述 思路 Java代码 代码链接 题目描述 在一个长度为n的数组里的所有数字都在0~n-1的范围内.数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次. 请找出数组中任 ...

随机推荐

  1. 关于Appium执行用例过程中问题处理办法

    关于Appium执行用例过程中问题处理办法 1.     运行环境 1.1 windows10   64位系统 1.2 华为荣耀V10   Android 9 1.3 appium-desktop 1 ...

  2. SpringBoot——拦截器

    更多内容,前往 IT-BLOG 一.登录时可能会出现重复提交问题.我们可以通过重定向解决此问题.例如:用户提交的请求为:/user/login,通过 redirect:重定向至 main.html请求 ...

  3. deepin安装retropie

    deepin安装retropie,并解决游戏列表中文乱码已经retroarch中文乱码. 安装retropie模拟器 sudo apt install -y git dialog unzip xmls ...

  4. 在已有的vue项目中添加单元测试模块

    package.json 添加新命令 "test": "jest",下载包: "jest": "^26.6.3", &q ...

  5. tidyr包几个函数的用法

    在R语言中,tidyr主要提供了一个类似Excel中数据透视表 (pivottable)的功能; gather和spread函数将数据在长格式和宽格式之间相互转化,应用在比如稀疏矩阵和稠密矩阵之间的转 ...

  6. Python常见部分内置方法与操作

    Python常见内置方法与操作 整型int 类型转换 int(其它数据类型),但只支持数字类型和小数类型 >>> num1 = input('Your age>>> ...

  7. 【前端黑魔法】浏览器打开任意可执行exe文件方法

    思路:通过注册表注册自定义URL协议执行bat脚本,将文件路径作为参数传入 环境:win10 前置问题与条件 问题1:可以从浏览器直接打开可执行文件吗? 答:不能.其实可以通过 ActiveXObje ...

  8. dev-tools

    Maven配置依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId& ...

  9. 【Dotnet 工具箱】跨平台图表库 LiveCharts2

    你好,这里是 Dotnet 工具箱,定期分享 Dotnet 有趣,实用的工具和组件,希望对您有用! LiveCharts2 LiveCharts2 是一个简单.灵活.交互式以及功能强大的跨平台图表库. ...

  10. JVM的内存分配及各种常量池的区别(静态常量池、运行时常量池、字符串常量池)

    JVM内存分配 先了解下JVM中的内存分配,此处以hotspot vm为例(官方jdk采用的vm) 程序计数器 栈 1. 虚拟机栈 2. 本地方法栈 Java堆 堆内存是各个线程共享的区域 方法区 它 ...