class Solution {
public int maxSales(int[] sales) {
int[] dp = new int[sales.length];
dp[0]=sales[0];
int max =sales[0];
for(int i=1;i<sales.length;i++){
dp[i]=Math.max(sales[i],dp[i-1]+sales[i]);
max = Math.max(dp[i],max);
}
return max;
“`java
class Solution {
public int maxSales(int[] sales) {
//dp[i]表示以第i个数结尾的连续天数的最高销售额, db[i] = Math.max(dp[i – 1] + sales[i], sales[i])
int max = sales[0];
int pre = 0;
for (int i = 1; i < sales.length; i++) {
pre = Math.max(pre + sales[i], sales[i]);
max = Math.max(max, pre);
}
return max;
}
}
class Solution {
public:
int maxSubArray(vector<int>& nums) {
// dp[i] is the max sum of subset of nums[x...i]
size_t n = nums.size();
int last = nums[0];
int max = last;
for (int i = 1; i < n; i++) {
last = std::max(last + nums[i], nums[i]);
max = std::max(max, last);
}
return max;
}
};
class Solution {
public int maxSubArray(int[] nums) {
int max = Integer.MIN_VALUE, sum = 0;
for (int num : nums) {
sum += num;
max = Math.max(max, sum);
if (sum < 0)
sum = 0;
}
return max;
}
}
动态规划
时间:O(n)
空间:O(1)
class Solution {
public int maxSubArray(int[] nums) {
int pre = nums[0], max = pre;
for (int i = 1; i < nums.length; i++) {
pre = Math.max(pre + nums[i], nums[i]);
max = Math.max(max, pre);
}
return max;
}
}
class Solution {
public int maxSubArray(int[] nums) {
int pre=nums[0];
int res=pre;
for(int i=1; i<nums.length; i++){
pre = Math.max(nums[i], pre+nums[i]);
res = Math.max(res, pre);
}
return res;
}
}
public int maxSubArray(int[] nums) {
int n = nums.length;
int[] dp = new int[n]; // 以num[i] 结尾的连续子数组
dp[0] = nums[0];
int res = dp[0];
for(int i = 1; i < n; i++){
dp[i] = nums[i] + (dp[i-1] < 0 ? 0 : dp[i-1]);
res = Math.max(res,dp[i]);
}
return res;
}
共以下 17 个回答
class Solution {
public int maxSales(int[] sales) {
int[] dp = new int[sales.length];
dp[0]=sales[0];
int max =sales[0];
for(int i=1;i<sales.length;i++){
dp[i]=Math.max(sales[i],dp[i-1]+sales[i]);
max = Math.max(dp[i],max);
}
return max;
}
时间空间均是on可优化空间到o1
“`java
class Solution {
public int maxSales(int[] sales) {
//dp[i]表示以第i个数结尾的连续天数的最高销售额, db[i] = Math.max(dp[i – 1] + sales[i], sales[i])
int max = sales[0];
int pre = 0;
for (int i = 1; i < sales.length; i++) { pre = Math.max(pre + sales[i], sales[i]); max = Math.max(max, pre); } return max; } }
MY【思路】利用DP算法,dp[i]为包括了以nums[i]为结尾的最大连续子序列,并做了优化,使得空间复杂度为O(1)
【复杂度】时间复杂度O(n),空间复杂度O(1)
时间复杂度: O(n)
滑动窗口,当到达索引i时,sum表示i之前数组的和,若为负数,则舍弃,sum=0,若为正数,则有加成应加上。
时间:O(n)
空间:O(1)
动态规划
时间:O(n)
空间:O(1)
C++实现& nums) {
int maxSubArray(std::vector
int maxSum = nums[0];
int currentSum = nums[0];
}
“`
思想:动态规划
时间复杂度:O(n) 空间复杂度:O(1)
时间复杂度是O(n),
空间复杂度是O(n)
时间复杂度:O(n)
空间复杂度:O(1)
c++动态规划& nums) {
int maxSubArray(vector
int dp;
dp=nums[0];
int maxn =dp;
for(int i = 1;i<nums.size();i++)
{
dp =max((dp+nums[i]),nums[i]);
maxn = max(maxn,dp);
}
return maxn;
}
时间复杂度O(n)