class Solution {
public int maxSubArray(int[] nums) {
int max = nums[0];
int dp = nums[0];
for(int i = 1; i < nums.length; i++){
dp = Math.max(nums[i] + dp, nums[i]);
max = Math.max(dp, max);
}
return max;
}
}
class Solution {
public int maxSubArray(int[] nums) {
int n = nums.length;
int[] f = new int[n];
f[0] = nums[0];
int max = f[0];
for (int i = 1; i < n; i++) {
f[i] = Math.max(0, f[i - 1]) + nums[i];
max = Math.max(max, f[i]);
}
return max;
}
}
**时间复杂度:O(N)**
**时间复杂度:O(1)**
```java
class Solution {
public int maxSubArray(int[] nums) {
int dp = nums[0];
int max = nums[0];
for (int i = 1; i < nums.length; i++) {
dp = Math.max(dp + nums[i], nums[i]);
max = Math.max(max, dp);
}
return max;
}
}
class Solution {
//时间复杂度O(n)
public int maxSubArray(int[] nums) {
int len = nums.length;
int dp = nums[0];
int max = nums[0];
for(int i = 1;i < len;i++){
dp = Math.max(0,dp) +nums[i];
max = Math.max(max,dp);
}
return max;
}
}
class Solution {
public:
int maxSubArray(vector<int>& nums) {
//动态规划,不断更新每个元素的值
int maxvalue = nums[0];
int sum = 0;
for(int i = 1; i < nums.size();i++){
nums[i] += max(nums[i-1],0);
maxvalue=max(nums[i],maxvalue);
}
return maxvalue;
}
};
var maxSubArray = function(nums) {
let max = nums[0];
let pre = 0;
for (let num of nums) {
pre = Math.max(pre + num, num);
max = Math.max(pre, max)
}
return max;
};
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] = Math.max(dp[i-1]+nums[i],nums[i]);
max = Math.max(max,dp[i]);
}
return max;
}
}
class Solution {
public int maxSubArray(int[] nums) {
int len = nums.length;
int dp = nums[0];
int max = nums[0];
for(int i = 1;i < len;i++){
dp = Math.max(0,dp) +nums[i];
max = Math.max(max,dp);
}
return max;
}
}
class Solution {
public int maxSubArray(int[] nums) {
int dp = nums[0];
int max = nums[0];
for (int i = 1; i < nums.length; i++) {
dp = Math.max(dp + nums[i], nums[i]);
max = Math.max(max, dp);
}
return max;
}
}
class Solution {
public int maxSubArray(int[] nums) {
int dp = nums[0];
int res = nums[0];
for(int i = 1;i < nums.length;i++){
dp = Math.max(nums[i],dp+nums[i]);
res = Math.max(res,dp);
}
return res;
}
}
共以下 19 个回答
最简单的动态规划问题,初始化为nums[0]
DP
```
时间复杂度 O(n)
思路:当前一个数小于0时,不去加,大于0就加
C++& nums) {
动态规划
class Solution {
public:
int maxSubArray(vector
int len = nums.size();
int dp = nums[0];
if(len 1) return dp;
int maxn = dp;
for(int i = 1; i < len; ++i) {
dp = max(nums[i], dp+nums[i]);
maxn = max(dp, maxn);
}
return maxn;
}
};
时间:O(n)
空间:O(1)
时间复杂度O(n)
//最简单的dp问题了& nums) {
class Solution {
public:
int maxSubArray(vector
for(int i=1;i<nums.size();++i) nums[i]=max(nums[i],nums[i]+nums[i-1]);
int res=INT32_MIN;
for(int cur:nums) res=max(res,cur);
return res;
};
时间复杂度O(n)空间复杂度O(1)
时间:O(n),空间:O(1)
时间复杂度为O(n),空间复杂度为O(1)