leetcode-53 Maximum Subarray

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

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.

Follow up:

If you have figured out the O(n) solution, try coding another solution using the divide and conquer approach, which is more subtle.

方法一:动态规划 计算出每个子集的值

    public int maxSubArray(int[] nums) {
        int[][] res = new int[nums.length][nums.length];
        res[0][0] = nums[0];
        int max = Integer.MIN_VALUE;
        for(int i=0;i<nums.length;i++) {
            for(int j=i;j<nums.length;j++) {
                if(i==j) {
                    res[i][j] = nums[i];
                }else if(i>j){
                    continue;
                }
                else{
                    res[i][j] = res[i][j-1]+nums[j];
                }
                max = Math.max(max, res[i][j]);
                
            }           
        }    
        return max;
    }

最后超时了。凉凉。

方法二:如何判断是1-n而不是0-n为最大值呢?判断 0所在的位置的数是否小于0 若小于0 则为1-n中的数

    public int maxSubArray(int[] nums) {
        int max =nums[0];
        int subMax = nums[0];
        for(int i=1;i<nums.length;i++) {
            subMax = Math.max(subMax+nums[i], nums[i]);
            max = Math.max(subMax, max);
            
        }
        
        return max;
    }
    

猜你喜欢

转载自blog.csdn.net/qq_38340127/article/details/89969127