package _53;
/**
* https://leetcode.cn/problems/maximum-subarray/
* 53. 最大子数组和
* 给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
* 2022-08-26 17:10
*
* 设定一个初始值,最大值等于初始值,
*
*/
public class Test {
public static void main(String[] args){
}
}
class Solution {
public int maxSubArray(int[] nums) {
int dp[] = new int[nums.length];
dp[0] = nums[0];
for(int i = 1;i<nums.length;i++){
if(dp[i-1]>0){
dp[i] = dp[i-1]+nums[i];
}else{
dp[i] = nums[i];
}
}
int max = dp[0];
for (int e:dp) {
if(e>max){
max = e;
}
}
return max;
}
}
/**
* 贪心法
* https://leetcode.cn/problems/maximum-subarray/solution/zui-da-zi-xu-he-cshi-xian-si-chong-jie-fa-bao-li-f/
* 用贪心法写一遍
* 从左向右迭代,一个个数字加过去,
* 如果sum<0,重新开始找子序串
*
* 分治法 没有很明白
*/
class Solution2 {
public int maxSubArray(int[] nums) {
int max = nums[0];
int temp = nums[0];
for(int i = 1;i<nums.length;i++){
if(temp>0){
temp = temp+nums[i];
}else{
temp = nums[i];
}
max = Math.max(max,temp);
}
return max;
}
}
53. 最大子数组和
最新推荐文章于 2024-11-08 16:58:57 发布