LeetCode053最大子序和

23 阅读1分钟

题目:

给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

示例:

  • 输入: [-2,1,-3,4,-1,2,1,-5,4]
  • 输出: 6
  • 解释:  连续子数组  [4,-1,2,1] 的和最大,为  6。

Java:

`public class LeetCode053 {

public static int maxSubArray(int[] nums) {
    if (nums.length == 1) {
        return nums[0];
    }
    int sum = Integer.MIN_VALUE;
    int count = 0;
    for (int i = 0; i < nums.length; i++) {
        count += nums[i];
        sum = Math.max(sum, count);
        if (count <= 0) {
            count = 0;
        }
    }
    return sum;
}

public static int dpMaxSubArray(int[] nums) {
    int ans = Integer.MIN_VALUE;
    int[] dp = new int[nums.length];
    dp[0] = nums[0];
    ans = dp[0];
    for (int i = 1; i < nums.length; i++) {
        dp[i] = Math.max(dp[i - 1] + nums[i], nums[i]);
        ans = Math.max(dp[i], ans);
    }
    return ans;
}

public static void main(String[] args) {
    int[] nums = {-2, 1, -3, 4, -1, 2, 1, -5, 4};
    System.out.println(maxSubArray(nums));
    System.out.println(dpMaxSubArray(nums));
}

}`

Go:

`package LeetCode

func MaxSunArray(nums []int) int { maxSum := nums[0] for i := 1; i < len(nums); i++ { if nums[i-1]+nums[i] > nums[i] { nums[i] += nums[i-1] } if nums[i] > maxSum { maxSum = nums[i] } } return maxSum }

func main() { array := []int{-2, 1, -3, 4, -1, 2, 1, -5, 4} sunArray := LeetCode.MaxSunArray(array) fmt.Println(sunArray) }`

青春已不复.何谈再少年.





如果大家喜欢我的分享的话.可以关注我的微信公众号

念何架构之路