leetcode[53]:Maximum Subarray

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/bless2015/article/details/88133623

给定一个int数组,求最大子序列和

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.

本题可以用动态规划和分治法求解。下面是动态规划发,时间复杂度为O(n)

    public static int maxSubArray(int[] nums) {
    	int length = nums.length;
    	int f[] = new int[length];
    	f[0]=nums[0];
    	for (int i = 1; i < length; i++) {
			f[i]=Math.max(f[i-1]+nums[i], nums[i]);
		}
    	int max=Integer.MIN_VALUE;
    	for (int i = 0; i < f.length; i++) {
			max=max>f[i]?max:f[i];
		}
        return max;
    }

解题思路:
1、首先判断是最大最小值问题,可以考虑使用dp算法
2、判断问题解空间为一维数组,即声明int f[]=new int[];
3、判断转移状态为f[i]=max(f[i-1]+nums[i],nums[i])
4、确定边界条件f[0]=nums[0]

猜你喜欢

转载自blog.csdn.net/bless2015/article/details/88133623