仅能操作一次时,需每次观察是否有为负情况置零。多次操作时,仅需判断是否后者大于前者。
leetcode 53、121、122
【代码】
class Solution {
public int maxSubArray(int[] nums) {
int sum=Integer.MIN_VALUE;
int cur=0;
for(int i=0;i<nums.length;i++){
cur+=nums[i];
sum=Math.max(sum,cur);
cur=cur>0?cur:0;
}
return sum;
}
}
【一次交易】
class Solution {
public int maxProfit(int[] prices) {
int cur=0;
int sum=0;
for(int i=1;i<prices.length;i++){
cur+=prices[i]-prices[i-1];
sum=Math.max(sum,cur);
cur=cur>0?cur:0;
}
return sum;
}
}
【多次交易】
public int maxProfit(int[] prices) {
int len=prices.length;
int win=0;
for(int i=1;i<len;i++){
if(prices[i-1]<prices[i]){
win+=prices[i]-prices[i-1];
}
}
return win;
}