问题描述:
Find the contiguous subarray within an array (containing at least one number) which has the largest sum.

For example, given the array [-2,1,-3,4,-1,2,1,-5,4],
the contiguous subarray [4,-1,2,1] has the largest sum = 6.

算法一:三重循环,时间复杂度O(n^3)

    private static int maxSubArray1(int[] nums) {
        int max = -0x7fffffff;
        int n = nums.length;
        for (int start = 0; start < n; start++) {
            for (int end = start + 1; end <= n; end++) {
                int sum = 0;
                for (int i = start; i < end; i++) {
                    sum += nums[i];
                }

                if (sum > max) {
                    max = sum;
                }
            }
        }

        return max;
    }

算法二:两重循环,优化重复求和的过程,时间复杂度O(n^2)

    private static int maxSubArray2(int[] nums) {
        int max = -0x7fffffff;
        int n = nums.length;
        for (int start = 0; start < n; ++start) {
            int sum = 0;
            for (int end = start; end < n; ++end) {
                sum += nums[end];
                if (sum > max) {
                    max = sum;
                }
            }
        }

        return max;
    }



登陆发表评论