给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
2018-11-18 21:06
2266 查看
示例:
输入: [-2,1,-3,4,-1,2,1,-5,4],
输出: 6
解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。
代码详解:
[code]public class Solution { public int maxSubArray(int[] nums) { int len = nums.length; if (len == 0) { return 0; } int[] dp = new int[len]; dp[0] = nums[0]; for (int i = 1; i < len; i++) { dp[i] = Math.max(nums[i], dp[i - 1] + nums[i]); } // 最后这一步,是求一个全局的最优值 int res = dp[0]; for (int i = 1; i < len; i++) { res = Math.max(res,dp[i]); } return res; } }
算法详解:
解析:dp[i] = Math.max(nums[i], dp[i - 1] + nums[i]);
dp[i] nums[i] dp[i - 1] + nums[i]
1 1 -1
-2 -3 -2
4 2 4
3 -1 3
5 2 5
6 1 5
........
通过该条代码得到前 i 个最大和,存储到dp[]中,用dp[]数组存储最大的数组数和,最后遍历该数组即可得到该数
阅读更多相关文章推荐
- 有一个直方图,用一个整数数组表示,其中每列的宽度为1,求所给直方图包含的最大矩形面积。比如,对于直方图[2,7,9,4],它所包含的最大矩形的面积为14(即[7,9]包涵的7x2的矩形)。给定一个直方图A及它的总宽度n,请返回最大矩形面积。保证直方图宽度小于等于500。保证结果在int范围内。
- 求整型数组中具有最大和的连续子数组,返回连续子数组的和,当只有一个元素时,直接返回这个元素值
- 给定一个数组,元素都是正整数,要求返回这些元素所组成的最大数
- 给定一个排序后的数组,包含n个整数,但这个数组已被旋转过很多次,编写代码找出数组中的某个元素
- 程序员面试金典——解题总结: 9.17中等难题 17.8给定一个整数数组(有正数有负数),找出总和最大的连续数列,并返回总和
- 定义一个int型的一维数组,包含10个元素,分别赋一些随机整数,然后求出所有元素的最大值,最小值,平均值,和值,并输出出来。
- Java编程:定义一个int型的一维数组,包含10个元素,分别赋一些随机整数,然后求出所有元素的最大值,最小值,平均值,和值,并输出出来。
- 给定一个排序后的数组,包含n个整数,但这个数组已被旋转过多次,找出数组中的某个元素
- leetcode-java.T016_threeSumClosest---给定包含n个整数数组S,找到S中的三个整数,从而使之和最接近给定的数,返回三个整数的总和.
- 给定一个由非负整数和整数m组成的数组,可以将该数组分成m个非空的连续子数组。 写一个算法来最小化这些m个子阵列之间的最大和。
- 给定整数数组,除了一个元素之外,每个元素都出现三次。 找到那个只出现一次的数
- 给定一个整数数组,两个数字的返回索引将它们加到一个特定的目标中。 您可以假设每个输入都只有一个解决方案,并且您可能不会两次使用相同的元素。
- 给定整数数组,返回一个新数组,使得新数组的索引i中的每个元素都是原始数组中除i中的所有数字的乘积。Python实现。
- 346/5000 给定一个n个整数的数组S,在S中找到三个整数,使得总和最接近给定数量的目标。 返回三个整数的和。
- 给定一个整数数组,返回数组中两个元素的和为target的索引
- leetcode:给定一个整数数组,除了一个元素外,每个元素都会出现两次。找到那一个。
- 有这样一个数组A,大小为n,相邻元素差的绝对值都是1。如:A={4,5,6,5,6,7,8,9,10,9}。现在,给定A和目标整数t,请找到t在A中的位置。
- 中位数 21% 通过 给定一个未排序的整数数组,找到其中位数。 中位数是排序后数组的中间值,如果数组的个数是偶数个,则返回排序后数组的第N/2个数
- 给定整数数组,除了一个元素之外,每个元素都会出现两次。 找到那个只出现一次的
- 给定一个整数数组(有正数有负数),找出总和最大的连续数列,并返回总和。