题目

53. Maximum Subarray

Given an integer array nums, find the contiguous subarray (containing at least one number) which has the largest sum and return its sum.

Example:

Input: [-2,1,-3,4,-1,2,1,-5,4],
Output: 6
Explanation: [4,-1,2,1] has the largest sum = 6.
Follow up:

If you have figured out the O(n) solution, try coding another solution using the divide and conquer approach, which is more subtle.

解决

解决思路:这是动态规划的题目,突破口是要找到一个公式,使得dp[i] = x * dp[i-1] + y, 这样子就可以根据上一个数推断出下一个结果,达到O(n)解。

这里的突破口是当前数nums[i], 是从自己开始,还是与前面的数dp[i-1] 加起来一起。这里就要判断dp[i - 1] > 0 ? dp[i - 1] : 0, 上一个数的和是否大于0.

那么问题就迎刃而解了。

  1. 如果dp[i - 1] < 0, 就从自己开始 dp[i] = nums[i];
  2. 如果dp[i - 1] > 0, 就延续前任的记过 dp[i] = nums[i] + dp[i - 1];
  3. 如果最大数是历史最大,则替换max = Math.max(max, dp[i]);, 最终结果为max。
class Solution {public int maxSubArray(int[] nums) {// check edgeif (nums == null || nums.length == 0) {throw new IllegalArgumentException();}int length = nums.length;int dp[] = new int[length];dp[0] = nums[0];int max = dp[0];for (int i = 1; i < length; i++) {dp[i] = nums[i] + (dp[i - 1] > 0 ? dp[i - 1] : 0);max = Math.max(max, dp[i]);}return max;}
}

算法:动态规划,最大子数组之和 Maximum Subarray相关推荐

  1. leetcode算法题--K 次串联后最大子数组之和★

    原题链接:https://leetcode-cn.com/problems/k-concatenation-maximum-sum/ 如图(来源) 记k==1,数组和为sum 分情况讨论: 当k == ...

  2. 求一个二维整数数组最大子数组之和,时间复杂度为N^2

    本随笔只由于时间原因,我就只写写思想了   二维数组最大子数组之和,可以  引用  一维最大子数组之和 的思想 一维最大子数组之和 的思想,在本博客上有,这里就不做多的介绍了 我们有一个最初的二维数组 ...

  3. 环形数组求最大子数组之和

    环形数组求最大子数组之和: 实验要求: 随机产生一个整形数组,假设首尾相连为环形,求其相连的字数组的和,并输出子数组的元素. 设计思路: 因为是环形,所以要考虑自设的头尾的情况,在此分为两大类考虑,一 ...

  4. 环形数组最大子数组之和

    题目:返回一个整数数组中最大子数组的和. 要求: 输入一个整形数组,数组里有正数也有负数. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 如果数组A[0]--A[j-1]首尾相邻, ...

  5. LeetCode 1191. K 次串联后最大子数组之和(前缀和+分类讨论)

    文章目录 1. 题目 2. 解题 1. 题目 给你一个整数数组 arr 和一个整数 k. 首先,我们要对该数组进行修改,即把原数组 arr 重复 k 次. 举个例子,如果 arr = [1, 2] 且 ...

  6. 最大子数组下标java,【算法】最大子数组

    问题描述:给定一只股票在某段时间内的历史价格变化曲线,找出一个能够实现收益最大化的时间段. 理解:为找出最大化的收益,需要考虑的是在买进和卖出时的价格变化幅度,因此从该股票的每日变化幅度来考虑问题比较 ...

  7. leetcode - 1191. K 次串联后最大子数组之和

    给你一个整数数组 arr 和一个整数 k. 首先,我们要对该数组进行修改,即把原数组 arr 重复 k 次. 举个例子,如果 arr = [1, 2] 且 k = 3,那么修改后的数组就是 [1, 2 ...

  8. 动态规划——最大子数组和(Leetcode 53)

    题目选自Leetcode 53. 最大子数组和 题目描述: 解题思路: 解题代码: int maxSubArray(int* nums, int numsSize){int pre = 0, maxA ...

  9. 算法-----------乘积最大子数组(Java版本)

    题目: 给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积.示例 1:输入: [2,3,-2,4] 输出: 6 解释: 子数组 ...

  10. 1191. K 次串联后最大子数组之和(最大子段和变形)

    给你一个整数数组 arr 和一个整数 k. 首先,我们要对该数组进行修改,即把原数组 arr 重复 k 次. 举个例子,如果 arr = [1, 2] 且 k = 3,那么修改后的数组就是 [1, 2 ...

最新文章

  1. 一文搞懂select语句在MySQL中的执行流程!
  2. window下git的使用
  3. 前端之同源策略 Jsonp 与 CORS
  4. [leetcode] @python 113. Path Sum II
  5. Kafka副本同步机制理解
  6. Linux线程编程之生产者消费者问题【转】
  7. 最容易扩展的光立方程序设计
  8. 【Linux】动态防火墙,实现对攻击IP的动态拦截,一定程度上解决云服务器主机经常被境外IP尝试登录,屏蔽指定地区、国家的IP连接
  9. Linux使用cp命令报cp:omitting directory错误
  10. Python(17)python使用tkinter实现一个简单的CSGO幸运转盘抽奖游戏
  11. 【防火墙篇】01. 映射 Web 服务器 ❀ WatchGuard 防火墙
  12. Python 基础知识教程
  13. 【视觉SLAM入门】一些关于视觉SLAM十四讲的重要基础概念
  14. scDeepCluster:Clustering single-cell RNA-seq data with a model-based deep learning approach论文解读
  15. 以马原的视角浅谈IP地址的发展——IPv4、IPv6、NAT
  16. 全功能mp3,wav音频格式转换器-QVE音频剪辑
  17. 使用cubemx工具的STM32对外部flash(W25Q64)的简单编程
  18. Axure Axhub Charts 数据编辑、显示
  19. 对ansys主要命令的解释
  20. 本地项目链接svn服务器,eclipse链接本地svn服务器

热门文章

  1. 常平计算机培训班,常平大朗CNC编程培训速成班,一个月学会UG编程
  2. python基于udp的网络聊天室再用tkinter显示_Python3:Tkinter gui中的UDP包发送/接收
  3. deque python_python3 deque(双向队列)的详细介绍
  4. eclipse代码量统计插件_推荐一波代码量、行数、提交量、作者等全维度统计神器...
  5. MyBatis数据输出
  6. 修改mysql数据存放路径
  7. Linux运维(三)
  8. Event Listener's Adapter Classes
  9. 华为手机连不上adb解决方法
  10. Linux 三个强大的系统资源监控工具