买卖股票的最佳时机Ⅱ(峰谷法)

mac2024-10-07  54

今天遇到了一个十分牛逼的算法 先把代码贴上来 题目在leetcode里

int maxProfit(int* prices, int pricesSize){ int i = 0; int valley = prices[0]; int peak = prices[0]; int sum = 0; while(i < pricesSize-1){ while(i<pricesSize-1 && prices[i] >= prices[i+1]){ i++; } valley = prices[i]; while(i<pricesSize-1 && prices[i] <= prices[i+1]){ i++; } peak = prices[i]; sum += peak-valley; } return sum; }

我认为这个算法的牛逼之处在于找峰和找谷的操作 while(i<pricesSize-1 && prices[i] >= prices[i+1]){ i++; } 这个while循环,在本元素大于后一个元素的时候,i就往后移动,当移动不了时,说明这就是个谷(比之前的都小,比后面的也都小)了,直接赋值valley = prices[i]; 同理,找峰的操作也是一样 还有注意一个细节,这个算法里面只用了一个i,这保证了峰的下标一定比谷的下标大(因为我们做的是股票题,卖股的日期一定要大于买的日期)

最新回复(0)