Ⅰhttps://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock/
第一版
class Solution {
public int maxProfit(int[] prices) {
if(prices.length<2) return 0;
int max_num=0;
int min_num=Integer.MAX_VALUE;
int max = 0;
int index=0;
int start=0;
while(index!=prices.length-1)
{
for(int i=start;i<prices.length;i++){
if(prices[i]>=max_num) {max_num=prices[i];index=i;}
}
for(int j=start;j<index;j++)
{
if(prices[j]<min_num) {min_num=prices[j];}
}
if(max<max_num-min_num) max = max_num-min_num;
max_num=0;
min_num=Integer.MAX_VALUE;
start=index+1;
}
return max;
}
}
提交运行速度极慢,但是理论复杂度其实不高?
官方解
public class Solution {
public int maxProfit(int prices[]) {
int minprice = Integer.MAX_VALUE;
int maxprofit = 0;
for (int i = 0; i < prices.length; i++) {
if (prices[i] < minprice)
minprice = prices[i];
else if (prices[i] - minprice > maxprofit)
maxprofit = prices[i] - minprice;
}
return maxprofit;
}
}
总结:逻辑思维不行,问题没想清楚
Ⅱhttps://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-ii/
第一版
思路:在极值点买入和卖出
class Solution {
public int maxProfit(int[] prices) {
if(prices.length<2) return 0;
int cur_num=prices[0];
int sum=0;
int index=0;
for(int i=0;i<prices.length-1;i++){
if(i==prices.length-2&&prices[i]<=prices[i+1]){
sum+=(prices[i+1]-cur_num);
}
if(prices[i]>prices[i+1]) {
sum+=(prices[i]-cur_num);
cur_num=prices[i+1];
}
}
return sum;
}
}
官方版
思路:只要后一位大于前一位即完成一次买卖
class Solution {
public int maxProfit(int[] prices) {
int maxprofit = 0;
for (int i = 1; i < prices.length; i++) {
if (prices[i] > prices[i - 1])
maxprofit += prices[i] - prices[i - 1];
}
return maxprofit;
}
}
总结:画图有益思考