alt

alt

//方法一:暴力破解
//分析://外循环,子数组的起始位置
	   //内循环,子数组的组合,比较找出子数组的最大值

//时间复杂度:n^2
//空间复杂度:1
public class Solution {
    public int FindGreatestSumOfSubArray(int[] array) {
        //暴力破解
        //定义两个变量,子数组的和sum,和最大值max
        int sum = 0;
        int max = array[0];
        //外循环,子数组的起始位置
        for(int i=0; i<array.length; i++){
            //最大值在循环中初始化
            sum = 0;
            //内循环,子数组的组合,比较找出子数组的最大值
            for(int j=i; j<array.length; j++){
                sum +=array[j];
                max = Math.max(max, sum);
            }
        }
        return max;        
    }
}
//方法一:暴力破解
//分析://外循环,子数组的起始位置
       //内循环,子数组的组合,比较找出子数组的最大值
//时间复杂度:n^2
//空间复杂度:1
public class Solution {
    public int FindGreatestSumOfSubArray(int[] array) {
        //动态规划
        //定义一个数组q,用于在q[i]中存放q[i-1] + array[i]与array[i]比较后的最大值
        //若q[i-1] + array[i] < array[i]     ,那就以array[i]开始重新找连续几个数的最大值
        //只要找出数组q存储的最大值,就能找到的连续几个数的最大值,
        int[] q = new int[array.length];
        int max = //方法二:优化动态规划
//分析:不需要定义新数组,只需将每次的最大值暂存就可以了
//时间复杂度:n
//空间复杂度:1
public class Solution {
    public int FindGreatestSumOfSubArray(int[] array) {
        int max = array[0];	
        int sum = array[0];		//不需要定义新数组,只需将每次的最大值暂存就可以了
        
        for(int i=1; i<array.length; i++){
            sum = Math.max(sum + array[i], array[i]);
            max = Math.max(max, sum);
        }
        return max;
    }
}
;
        q[0] = array[0];
        
        for(int i=1; i<array.length; i++){
            q[i] = Math.max(q[i-1] + array[i], array[i]);
            max = Math.max(max, q[i]);
        }
        return max;
    }
}
//方法二:动态规划
//时间复杂度:n
//空间复杂度:n
public class Solution {
    public int FindGreatestSumOfSubArray(int[] array) {
        //动态规划:分析如下
        //定义一个数组q,用于在q[i]中存放q[i-1] + array[i]与array[i]比较后的最大值
        //若q[i-1] + array[i] < array[i]     ,那就以array[i]开始重新找连续几个数的最大值
        //只要找出数组q存储的最大值,就能找到的连续几个数的最大值,
        int[] q = new int[array.length];
        int max = //方法二:优化动态规划
//分析:不需要定义新数组,只需将每次的最大值暂存就可以了
//时间复杂度:n
//空间复杂度:1
public class Solution {
    public int FindGreatestSumOfSubArray(int[] array) {
        int max = array[0];	
        int sum = array[0];		//不需要定义新数组,只需将每次的最大值暂存就可以了
        
        for(int i=1; i<array.length; i++){
            sum = Math.max(sum + array[i], array[i]);
            max = Math.max(max, sum);
        }
        return max;
    }
}
;
        q[0] = array[0];
        
        for(int i=1; i<array.length; i++){
            q[i] = Math.max(q[i-1] + array[i], array[i]);
            max = Math.max(max, q[i]);
        }
        return max;
    }
}
//方法二:优化动态规划
//分析:不需要定义新数组,只需将每次的最大值暂存就可以了
//时间复杂度:n
//空间复杂度:1
public class Solution {
    public int FindGreatestSumOfSubArray(int[] array) {
        int max = //方法二:优化动态规划
//分析:不需要定义新数组,只需将每次的最大值暂存就可以了
//时间复杂度:n
//空间复杂度:1
public class Solution {
    public int FindGreatestSumOfSubArray(int[] array) {
        int max = array[0];	
        int sum = array[0];		//不需要定义新数组,只需将每次的最大值暂存就可以了
        
        for(int i=1; i<array.length; i++){
            sum = Math.max(sum + array[i], array[i]);
            max = Math.max(max, sum);
        }
        return max;
    }
}
;	
        int sum = array[0];		//不需要定义新数组,只需将每次的最大值暂存就可以了
        
        for(int i=1; i<array.length; i++){
            sum = Math.max(sum + array[i], array[i]);
            max = Math.max(max, sum);
        }
        return max;
    }
}