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

青海最好的网站建设公司域名查询网

青海最好的网站建设公司,域名查询网,黑龙江省建设局网站,做新闻源网站采集站赚钱【LeetCode】152、乘积最大子数组 文章目录 一、dp1.1 dp1.2 简化代码 二、多语言解法 一、dp 1.1 dp 从前向后遍历, 当遍历到 nums[i] 时, 有如下三种情况 能得到最大值: 只使用 nums[i], 例如 [0.1, 0.3, 0.2, 100] 则 [100] 是最大值使用 max(nums[0…i-1]) * nums[i], 例…

【LeetCode】152、乘积最大子数组

文章目录

  • 一、dp
    • 1.1 dp
    • 1.2 简化代码
  • 二、多语言解法

一、dp

1.1 dp

从前向后遍历, 当遍历到 nums[i] 时, 有如下三种情况 能得到最大值:

  1. 只使用 nums[i], 例如 [0.1, 0.3, 0.2, 100] 则 [100] 是最大值
  2. 使用 max(nums[0…i-1]) * nums[i], 例如 [1, 3, 2, 100], 则 [1, 3, 2, 100] 是最大值, 因为 nums[0…i-1] 的 [1, 3, 2] 是最大值
  3. 使用 min(nums[0…i-1]) * nums[i], 例如 [-1, 3, -2, -100], 则 [-1, 3, -2, -100] 是最大值, 因为 nums[0…i-1] 的 [-1, 3, -2] 是最小值, 最小值乘以最小值得到最大值

所以, 每一步, 都取上述三种情况的最小值和最大值. 逐步向后递推.

// go
func maxProduct(nums []int) int {ans := nums[0]mi, ma := nums[0], nums[0] // 初始值var curmin, curmax int // 临时值, 提前申请, 避免重复申请for i := 1; i < len(nums); i++ {v := nums[i]curmin = min(v, min(ma*v, mi*v))curmax = max(v, max(ma*v, mi*v))mi, ma = curmin, curmaxans = max(ans, ma)}return ans
}

算法讲解071【必备】子数组最大累加和问题与扩展-下

参考
关于「无后效性」

  • 某个阶段的状态一旦确定了,那么此后的过程不再受之前曾经的状态和决策的影响
  • 不管你过去经历过什么状态,做过什么决策,未来和过去无关
  • 当前的状态是此前历史的一个综合给出的结果,历史影响你也只是造就了你当前的状态,通过当前状态去影响你未来的进程

1.2 简化代码

为了简化代码, 可以不从1开始遍历
通过设置 mi, ma 为 1, 1, 即可从0开始遍历了
参考

func maxProduct(nums []int) int {ans := nums[0]mi, ma := 1, 1var curmi, curma intfor _, v := range nums {curmi = min(v, mi*v, ma*v)curma = max(v, mi*v, ma*v)mi, ma = curmi, curmaans = max(ans, ma)}return ans
}

二、多语言解法

C p p / G o / P y t h o n / R u s t / J s / T s Cpp/Go/Python/Rust/Js/Ts Cpp/Go/Python/Rust/Js/Ts

// cpp
class Solution {
public:int maxProduct(vector<int>& nums) {int ans = nums[0];int mi = 1, ma = 1;for (int v : nums) {int curmi = min({v, v*mi, v*ma});int curma = max({v, v*mi, v*ma});mi = curmi;ma = curma; // 注意 c++ mi, ma = curmi, curma 有问题/*`mi, ma = curmi, curma;` 在 C++ 中是有问题的。这是因为 C++ 不支持这种同时赋值的语法。C++ 中的逗号运算符不会像 Python 或 Golang 那样实现多重赋值;相反,它会依次执行每个表达式,并返回最后一个表达式的值。因此,`mi, ma = curmi, curma;` 实际上只会对 `ma` 进行赋值,而不是同时对 `mi` 和 `ma` 赋值。*/ans = max(ans, ma);}return ans;}
};
// go 同上
# python
class Solution:def maxProduct(self, nums: List[int]) -> int:ans = nums[0]mi, ma = 1, 1for v in nums:curmi = min(v, v*mi, v*ma)curma = max(v, v*mi, v*ma)mi, ma = curmi, curmaans = max(ans, ma)return ans
// rust
impl Solution {pub fn max_product(nums: Vec<i32>) -> i32 {let mut ans = nums[0];let mut mi = 1;let mut ma = 1;for v in nums {let curmi = v.min(v*mi).min(v*ma);let curma = v.max(v*mi).max(v*ma);mi = curmi;ma = curma;ans = ans.max(ma);}ans}
}
// js
/*** @param {number[]} nums* @return {number}*/
var maxProduct = function(nums) {let ans = nums[0];let mi = 1;let ma = 1;for (const v of nums) {let curmi = Math.min(v, v*mi, v*ma);let curma = Math.max(v, v*mi, v*ma);mi = curmi;ma = curma;ans = Math.max(ans, ma);}return ans;
};
// ts
http://www.hrbkazy.com/news/43318.html

相关文章:

  • 手机网站网络环境长沙哪家网络公司做网站好
  • 如何申请免费的网站空间怎样做电商 入手
  • 深圳市住房和建设局网站住房保障品牌策划方案模板
  • 大连学网站制作百度知道下载
  • wordpress最好用的seo郑州seo关键词自然排名工具
  • 手机图片网站 模版大数据智能营销
  • 深圳深圳网站开发论坛营销
  • swipe类网站爱站网关键词查询网站
  • 微网站 底部导航菜单百度指数代表什么意思
  • 制作网站页面怎么做网站推广的策略
  • 国外做问卷网站东莞网络推广系统
  • seo网站做推广价格windows优化大师怎么下载
  • 做网站的企业浙江网站seo
  • 二手备案域名购买优化建议
  • 柳州做网站哪家好东莞市网站建设
  • wordpress教程全套搜索引擎优化案例
  • app制作开发公司怎么收费常州谷歌优化
  • 网站开发 网页上传 网页制作百度客服人工
  • 视觉设计师工资一般多少哈尔滨seo整站优化
  • 数据库网页制作教程文山seo公司
  • 汕头网站设计电话百度用户服务中心官网
  • 做网站需要走哪些程序关键词优化排名费用
  • 用jsp做的网站前后端交互如何在互联网上做推广
  • 榆林建设局网站推广公司有哪些
  • 网站及推广重庆网站开发公司
  • 什么情况自己建设网站百度新闻app
  • 网站开发模块的需求分析精准广告投放
  • 网站是别人做的 ftp账号吗个人网站网页首页
  • 网站素材 图标seo就业指导
  • 用html5设计个人网站关键词出价计算公式