LeetCode--53:最大子序和(java)

原题链接
推荐题解
一维数组 dp[ i ] 表示 nums 中以 nums[ i ] 为结尾的最大子序和。
dp方程:dp[i] = max(nums[i],dp[i - 1] + nums[i])
因为dp[i - 1] 有可能是负的,所以需要将 nums[i] 与 nums[i] + dp[i - 1] 比较一下取较大者

	//动态规划       99.98%  58.67%
	public int maxSubArray(int[] nums) {
		if(nums == null || nums.length == 0) return -1;
		int[] dp = nums.clone();
		int max = dp[0];
		for(int i = 1;i < dp.length;i++) {
			dp[i] = Math.max(nums[i], dp[i - 1] + nums[i]);
			if(max < dp[i]) max = dp[i];
		}
		return max;
    }
	//不申请额外数组,复用nums(工程上不能这么干)  99.98%  88.58%
	public int maxSubArray2(int[] nums) {
		if(nums == null || nums.length == 0) return -1;
		int max = nums[0];
		for(int i = 1;i < nums.length;i++) {
			nums[i] = Math.max(nums[i], nums[i - 1] + nums[i]);
			if(max < nums[i]) max = nums[i];
		}
		return max;
    }
发布了22 篇原创文章 · 获赞 3 · 访问量 424
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 1024 设计师: 上身试试

分享到微信朋友圈

×

扫一扫,手机浏览