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

(分治算法3)leecode 53 最大子数组和(最大子段和)

题目描述

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

子数组是数组中的一个连续部分。

分治解法

这个问题可以分成从左半边数组找最大子段和从右半部分找最大子段和。
对于跨越两个数组的情况,我们可以从中间一定要包含左边界的数字或者右边界的数字,只需要一次遍历就可以了。

class Solution {public class Status {public int lSum, rSum, mSum, iSum;public Status(int lSum, int rSum, int mSum, int iSum) {this.lSum = lSum;this.rSum = rSum;this.mSum = mSum;this.iSum = iSum;}}public int maxSubArray(int[] nums) {return getInfo(nums, 0, nums.length - 1).mSum;}public Status getInfo(int[] a, int l, int r) {if (l == r) {return new Status(a[l], a[l], a[l], a[l]);}int m = (l + r) >> 1;Status lSub = getInfo(a, l, m);Status rSub = getInfo(a, m + 1, r);return pushUp(lSub, rSub);}public Status pushUp(Status l, Status r) {int iSum = l.iSum + r.iSum;int lSum = Math.max(l.lSum, l.iSum + r.lSum);int rSum = Math.max(r.rSum, r.iSum + l.rSum);int mSum = Math.max(Math.max(l.mSum, r.mSum), l.rSum + r.lSum);return new Status(lSum, rSum, mSum, iSum);}
}
http://www.lryc.cn/news/374672.html

相关文章:

  • 【C++】模板初级
  • eslint 使用单引号,Prettier使用双引号冲突
  • 进化生物学的数学原理 知识点总结
  • 如何挑到高质量的静态IP代理?
  • vagrant putty错误的解决
  • 图像分割——U-Net论文介绍+代码(PyTorch)
  • C#进阶-ASP.NET的WebService跨域CORS问题解决方案
  • 如何利用TikTok矩阵源码实现自动定时发布和高效多账号管理
  • Java高级编程技术详解:从多线程到算法优化的全面指南
  • Redis 分布式锁过期了,还没处理完怎么办?
  • Vue2+Element-ui后台系统常用js方法
  • Kafka高频面试题整理
  • uniapp地图自定义文字和图标
  • k8s_探针专题
  • MySQL触发器基本结构
  • 前缀和(一维前缀和+二维前缀和)
  • web前端五行属性:深入探索与实战解析
  • 白酒:茅台镇白酒的酒厂社会责任与可持续发展
  • 音视频开发_SDL音频播放器的实现
  • C语言学习系列:初识C语言
  • 利用反向代理编写HTTP抓包工具——可视化界面
  • 下拉框数据被遮挡 且 后续数据无法下拉的 解决方法
  • 课设--学生成绩管理系统(二)
  • STM32CubeMX配置-外部中断配置
  • 基于Vue的日程排班表 - common-schedule
  • SmartEDA、Multisim、Proteus大比拼:电路设计王者之争?
  • 【教资科一传统文化】文化素养传统文化之神话传说、天文历法、古代称谓、中国传统节日、成语典故
  • Apache Pulsar 从入门到精通
  • [Bug]使用duckduckgo的duckduckgo_search API搜索图片出现了错误
  • 线程池若干问题