122. 买卖股票的最佳时机 II
难度:Low
掌握程度:Low
Javascript(速度慢)
var maxProfit = function(prices) {
if(prices.length === 0){
return 0;
}
# valley代表最低点,peak 代表最高点
let profit = 0, valley = prices[0], peak = prices[0];
let i = 0;
while(i<prices.length-1){
#如果后面的数小于现在的数,说明在下跌
while(i<prices.length - 1 && prices[i] >= prices[i+1]){
i++;
}
#跳出上面的循环之后,我们找到了最低点,现在开始上升
valley = prices[i];
while(i<prices.length - 1 && prices[i] <= prices[i+1]){
i++;
}
#跳出上面的循环后,我们找到最高点
peak = prices[i];
profit += peak-valley;
}
return profit;
};
Java(速度快)
class Solution {
public int maxProfit(int[] prices) {
if(prices.length == 0){
return 0;
}
int profit = 0, valley = prices[0], peak = prices[0];
int i = 0;
while(i<prices.length-1){
while(i<prices.length - 1 && prices[i] >= prices[i+1]){
i++;
}
valley = prices[i];
while(i<prices.length - 1 && prices[i] <= prices[i+1]){
i++;
}
peak = prices[i];
profit += peak-valley;
}
return profit;
}
}
贪心算法,代码最少
var maxProfit = function(prices) {
if(prices.length === 0){
return 0;
}
let profit = 0;
for(let i=0; i<prices.length-1;i++){
#只要现在的price小于明天的price,我们就把差值加到利润里
if(prices[i] < prices[i+1]){
profit += prices[i+1] - prices[i];
}
}
return profit;
};