买卖股票的最佳时机(每日一题-简单)
题解:(自己写了一个暴力法,超时了,但是也记录一下)
思路:用两个for循环,求解第一天买入之后,可以卖出的最大价格,最后求出这些价格的最大值。
class Solution {public int maxProfit(int[] prices) {int res1=0;for(int i=0;i<prices.length-1;i++){int res=0;for(int j=i+1;j<prices.length;j++){if(prices[j]>prices[i]){res=Math.max(prices[j]-prices[i],res);}}prices[i]=res;res1=Math.max(res1,prices[i]);}return res1;}
}
看其他题解发现只需要一次for循环即可求出答案:
初始化两个int变量,一个用来存储最低价格,一个用来存储最高利润。
最低价格变量可以初始化为prices[0],也就是第一天的价格。最高利润初始化为0;
在for循环遍历过程中,不断更新最低价格以及最高利润。
最低价格就是判断price[i]和之前的最低价格哪个更小,就选哪个。
最高利润就是判断第i天卖出股票的利润和之前的最高利润哪个高,就选哪个。
代码:
class Solution {public int maxProfit(int[] prices) {int cost=prices[0];int res=0;for(int i=0;i<prices.length;i++){cost=Math.min(cost,prices[i]);res=Math.max(prices[i]-cost,res);}return res;}
}