/**
* leetcode
* 第53题:简单题
* 题目:给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
* 例子:
* nums = [-2,1,-3,4,-1,2,1,-5,4]
* 输出:6
* 连续子数组 [4,-1,2,1] 的和最大,为 6
* @author
* @create 2021-03-13 14:35
*/
public class Solution53 {
public static void main(String[] args) {
int[] arr = new int[]{-2,1,-3,4,-1,2,1,-5,4};
int res = maxSubArrayDP(arr);
System.out.println(res);
}
/**
* 贪心
* @param nums
* @return
*/
public static int maxSubArrayGreedy(int[] nums){
int res = nums[0];//保存子序列在相加过程中的最大值
int sum = 0;//保存累加结果
for (int num : nums){//增强for循环遍历
if (sum > 0){//当前和大于0时,加上当前值
sum += num;
}else{//当前和小于0时,将sum重置为当前值
sum = num;
}
res = Math.max(sum, res);//保存相加过程中的最大值
}
return res;
}
/**
* 动态规划
* @param nums
* @return
*/
public static int maxSubArrayDP(int[] nums){
int max = Integer.MIN_VALUE;
int[] dp = new int[nums.length + 1];//记录子序列的最大和
for (int i = 1;i<=nums.length;i++){
dp[i] = Math.max(0,dp[i-1]+nums[i-1]);
if (dp[i] > max){
max = dp[i];
}
}
return max;
}
}
【leetcode】第53题:最大子序和
最新推荐文章于 2024-09-08 20:02:08 发布