屏蔽ip地址访问网站,如何给网站做下载附件,网站模板下载免费,网站越来越难做给定一个整数数组 nums #xff0c;找到一个具有最大和的连续子数组#xff08;子数组最少包含一个元素#xff09;#xff0c;返回其最大和。
示例:
输入: [-2,1,-3,4,-1,2,1,-5,4], 输出: 6 解释: 连续子数组 [4,-1,2,1] 的和最大#xff0c;为 6。 进阶:
如果你已经…给定一个整数数组 nums 找到一个具有最大和的连续子数组子数组最少包含一个元素返回其最大和。
示例:
输入: [-2,1,-3,4,-1,2,1,-5,4], 输出: 6 解释: 连续子数组 [4,-1,2,1] 的和最大为 6。 进阶:
如果你已经实现复杂度为 O(n) 的解法尝试使用更为精妙的分治法求解。 本提的进阶建议分治法但使用动态规划程序的性能更高
动态规划
动态规划的是首先对数组进行遍历当前最大连续子序列和为 sum结果为 sum 如果 max 0则说明 sum 对结果有增益效果则 sum 保留并加上当前遍历数字 如果 max 0则说明 sum 对结果无增益效果需要舍弃则 sum 直接更新为0 每次比较 sum 和 max的大小将最大值置为sum遍历结束返回结果 时间复杂度O(n)
可直接提交的代码
class Solution { public int maxSubArray(int[] nums) { int max 0; int i,sum; int n nums.length; sum nums[0]; for(i0;in;i) { maxnums[i]; if(maxsum) { sum max; } if(max0) { max 0; } else if(maxsum) { sum max; } } return sum; } } 完整的代码 public class Solution53 { public static int maxSubArray(int[] nums) { int max 0; int i,sum; int n nums.length; sum nums[0]; for(i0;in;i) { maxnums[i]; if(maxsum) { sum max; } if(max0) { max 0; } else if(maxsum) { sum max; } } return sum; } public static void main(String[] args) { //int[] a {-2,1,-3,4,-1,2,1,-5,4}; int[] a {-1,-2}; System.out.println(maxSubArray(a)); } }