版权声明:本文为博主原创文章,未经博主允许不得转载。 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]