LeetCode53 最大子序列问题

题目描述:

    给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
    示例:
    输入: [-2,1,-3,4,-1,2,1,-5,4],
    输出: 6
    解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。

找到一组数中的另一个子序列,使子序列的和最大,拿到一个数,这个数如果即加上他之前的的所有数的和,与他原先相比增大了,那么就选取大的数
     * 暂时作为这个数组中的子序列之和的最大值,反之也一样,arr[i]就是记录  从0到i的元素的和 与nums[i]两者的最大值。

package cn.leetcode.test;


public class MaxSubArray {
	public static void main(String[] args) {
		int [] nums = {-2,1,-3,4,-1,2,1,-5,4};
		int sum = maxSubArray(nums);
		System.out.println(sum);
	}
	
	
	
	public static int maxSubArray(int [] nums) {
		if(nums.length==1) {//题目上至少包含一个元素
			return nums[0];
		}
		int len = nums.length;
		int arr[] = new int[len];
		int result = nums[0];
		arr[0] = nums[0];
		for (int i = 1; i < arr.length; i++) {
			arr[i] = Math.max(nums[i], nums[i]+arr[i-1]);//这一步是关键
			result = Math.max(arr[i], result);
		}
		
		return result;
	}
	
}

 

posted on 2019-07-11 21:56  青山是谁  阅读(11)  评论(0编辑  收藏  举报