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

【LeetCode】每日一题:最大子数组和

给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
子数组是数组中的一个连续部分。

解题思路

要注意最小值是整个前缀,主要是cumsum然后按照买卖股票的思路做的,但是边界处理很容易错,可以以最开始几个边界来判定初始值,这个方法挺好用的。

AC代码

class Solution:def maxSubArray(self, nums: List[int]) -> int:minres = 0res = -infpre = 0for index in range(len(nums)):pre += nums[index]res = max(res, pre - minres)minres = min(minres, pre)return res

官方思路

动态规划

注意动态规划的重点是以i结尾的最大子串,只有加上结尾这个条件才能写递归式。

我们需要两个变量,一个变量用来记录上一个递归结果,其应该为单独上一个数或者上一个数加上前面一段。这里的变量逻辑和cumsum的前缀和逻辑是有区别的。

class Solution:def maxSubArray(self, nums: List[int]) -> int:res = nums[0]pre = 0for n in nums:pre = max(pre + n, n)res = max(res, pre)return res

二分法

线段树的思想,第一次看到,需要维护四个变量,分辨是非左端点最大值,有点点最大值,整区间值和区间内最大值,这个思路其实像是多道二分法题目的合并了,这种做法的好处在于可以存储任意区间的结果。如果需要多次输出结果,这种方法的优势就比较明显了。

class Solution {
public:struct Status {int lSum, rSum, mSum, iSum;};Status pushUp(Status l, Status r) {int iSum = l.iSum + r.iSum;int lSum = max(l.lSum, l.iSum + r.lSum);int rSum = max(r.rSum, r.iSum + l.rSum);int mSum = max(max(l.mSum, r.mSum), l.rSum + r.lSum);return (Status) {lSum, rSum, mSum, iSum};};Status get(vector<int> &a, int l, int r) {if (l == r) {return (Status) {a[l], a[l], a[l], a[l]};}int m = (l + r) >> 1;Status lSub = get(a, l, m);Status rSub = get(a, m + 1, r);return pushUp(lSub, rSub);}int maxSubArray(vector<int>& nums) {return get(nums, 0, nums.size() - 1).mSum;}
};
http://www.lryc.cn/news/383160.html

相关文章:

  • 什么是进程?
  • 后端返回base64文件流下载
  • 云原生面试
  • 深度学习入门2—— 神经网络的组成和3层神经网络的实现
  • tensorflow学习:错误 InternalError: Dst tensor is not initialized
  • Docker环境安装anythingllm
  • FEC 向前纠错编码
  • 【jupyter notebook】解决打不开以及安装扩展插件的问题
  • Perl文件句柄深度解析:掌握文件操作的核心
  • Tomcat 下载部署到 idea
  • FutureTask如何使用?
  • Webpack: 如何借助预处理器、PostCSS 等构建现代 CSS 工程环境
  • 一篇文章告诉你如何正确使用chatgpt提示词
  • qt基于QGraphicsView的屏幕旋转
  • 一个土木工程专业背景的开发者,讲述开源带给他的力量
  • express+vue在线im实现【四】
  • 【Qt 实现3D按钮】
  • 8.每日LeetCode-笔试题,交替打印数字和字母
  • UE5近战对抗系统Tutorial
  • Typescript: declear
  • Linux内核编译流程
  • 昇思25天学习打卡营第2天 | 张量Tensor
  • 时间安排 |规划
  • PS系统教程28
  • 如何在web页面下做自动化测试?
  • spring源码环境的搭建
  • 小山菌_代码随想录算法训练营第三十四天| 56. 合并区间、
  • 让工厂像手机一样更“聪明”
  • vue2与vue3数据响应式对比之检测变化
  • Spring Cloud - 开发环境搭建