贪心算法leetcode 122
首先放上自己一开始的第一个解:
int start = prices[0]; int end = prices[0]; int count = 0; for (int i = 1; i < prices.length; i++) { if (prices[i] < end) {count += end-start;start = prices[i];end = prices[i];} else end = prices[i]; } return count+= end-start;
定义了一个count用来存放利润总额。start和end用来表示一个递增序列的开始和末尾。一发现递增序列结束,就把这个差值加到利润里面。
没想到,这个start和end其实是不必要的。自以为理解了贪心算法的”局部最优推导到全局最优“, 但是没想到自己的这个局部还不算是最局部的。实际上,只要两个数的差值是正的,加到利润里面就对了。
if(prices.length==0) { return 0; } 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;