贪心算法:
具体的解题思路如下:
II 的解题思路可以分为两部分,
1. 找到数组中差值较大的两个元素,计算差值。
2. 再步骤一最大的元素的之后,继续遍历,寻找差值最大的两个元素
可以得出的是,遍历指针是一直向着数组的尾部移动的,由于要取得局部的最大差值,这一局部子数组中的元素一定是递增的,所以先找到递增结束的位置,那就是递增位置的起点,然后遍历至此轮递增结束时的位置,这样就得到了一个局部的最优解。
此思路由于指针只遍历一次,所以时间复杂度为O(N)。
以下是代码:
class Solution { public int maxProfit(int[] prices) { if(prices.length <=1){ return 0; } int i=0; int sum = 0; while (i<prices.length-1){ while (i < prices.length-1 && prices[i+1] <= prices[i]){ i++; //找递增的起始位置 } sum -= prices[i]; while (i < prices.length-1 && prices[i+1] >= prices[i]){ i++; //找递增的结束位置 } sum+= prices[i]; } return sum; } }
原文地址:https://www.cnblogs.com/Kaithy-Rookie/p/11316976.html
时间: 2024-10-01 21:25:54