LeetCode—maximum-subarray(最大子数组的和)—java

题目描述

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.

click to show more practice.

More practice:

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

思路解析:https://www.cnblogs.com/springfor/p/3877058.html

  • 求连续的数组值,相加的和最大和

  • 试想一下,如果我们从头遍历这个数组。对于数组中的其中一个元素,它只有两个选择:

     1. 要么加入之前的数组加和之中(跟别人一组)

     2. 要么自己单立一个数组(自己单开一组)

所以对于这个元素应该如何选择,就看他能对哪个组的贡献大。如果跟别人一组,能让总加和变大,还是跟别人一组好了;如果自己起个头一组,自己的值比之前加和的值还要大,那么还是自己单开一组好了。

所以利用一个big数组,记录每一轮big的最大值,big[i]表示当前这个元素是跟之前数组加和一组还是自己单立一组好,然后维护一个全局最大值即为答案。

代码

public class Solution {
    public int maxSubArray(int[] A) {
        int[] big =new int[A.length];//big数组记录遍历到当前i时最大的和。
        int max = A[0];//记录所有的最大值
        big[0]=A[0];
        for(int i=1;i

你可能感兴趣的:(数组,牛客,Java,在线编程,LeetCode)