题目:
给定一个整数数组 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) }`
青春已不复.何谈再少年.
如果大家喜欢我的分享的话.可以关注我的微信公众号
念何架构之路