最大子数和
问题描述:
给你一个整数数组
nums
,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。子数组是数组中的一个连续部分。示例 1:
输入:nums = [-2,1,-3,4,-1,2,1,-5,4] 输出:6 解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。示例 2:
输入:nums = [1] 输出:1示例 3:
输入:nums = [5,4,-1,7,8] 输出:23
//提交版
class Solution {
public int maxSubArray(int[] nums) {
int[] dp = new int[nums.length];
dp[0] = nums[0];
int max = nums[0];
for (int i = 1;i<nums.length;i++){
//若前序数组的和没有当前指针指向的数大,则将dp[i]置为指针指向的数(最大值),因为前序没有当前大,那么产生的连续最大和可能就会在以它为开始的连续里面
dp[i] = Math.max(dp[i-1] + nums[i],nums[i]);
if (max<dp[i]){
max = dp[i];
}
}
return max;
}
}
import java.util.Arrays;
public class hot10_maxSubArray {
public int maxSubArray(int[] nums){
//初始化dp数组
int[] dp = new int[nums.length];
dp[0] = nums[0];
int max = nums[0];
for (int i = 1;i<nums.length;i++){
//若前序数组的和没有当前指针指向的数大,则将dp[i]置为指针指向的数(最大值),因为前序没有当前大,那么产生的连续最大和可能就会在以它为开始的连续里面
dp[i] = Math.max(dp[i-1] + nums[i],nums[i]);
if (max<dp[i]){
max = dp[i];
}
}
return max;
}
public static void main(String[] args){
int[] nums = {-2,1,-3,4,-1,2,1,-5,4};
System.out.println("输入:" + Arrays.toString(nums));
hot10_maxSubArray hot10MaxSubArray = new hot10_maxSubArray();
int result = hot10MaxSubArray.maxSubArray(nums);
System.out.println("输出:" + result);
}
}