龙岗网站建设价格,厦门网站推广,wordpress 只有内页能打开,免费的crm软件122.买卖股票的最佳时机II
思路#xff1a; 想要获得利润#xff0c;至少要以两天为一个交易单元#xff0c;因为两天才会有股价差。因此可以将最终利润进行分解#xff0c;如prices[3] - prices[0] (prices[3] - prices[2]) (prices[2] - prices[1]) (prices[1] - pr…122.买卖股票的最佳时机II
思路 想要获得利润至少要以两天为一个交易单元因为两天才会有股价差。因此可以将最终利润进行分解如prices[3] - prices[0] (prices[3] - prices[2]) (prices[2] - prices[1]) (prices[1] - prices[0])也就是把利润分解为每天为单位的维度那么就可以很清晰地看出哪些天有收益哪些天是亏损而要获得最大利润只需要收集所有正利润。局部最优收集每天的正利润全局最优求得最大利润。时间复杂度O(n)空间复杂度O(1)
class Solution {
public:int maxProfit(vectorint prices) {int res 0;for(int i 1; i prices.size(); i) {if(prices[i] - prices[i - 1] 0) {//只统计正利润res prices[i] - prices[i - 1];}// res max(prices[i] - prices[i - 1], 0);//也可以这样写}return res;}
}; 55. 跳跃游戏 思路 本题关键在于可跳的覆盖范围即每次取最大的跳跃步数只要终点在可以跳到的覆盖范围之内那么就一定能跳到终点。做法 每次移动取最大跳跃步数得到最大的覆盖范围每移动一个单位就更新最大覆盖范围。i只能在覆盖范围cover内遍历每移动一个元素cover 得到该元素数值新的覆盖范围的补充让 i 继续移动下去。而cover更新时取cover和新的覆盖范围的较大者。如果 cover 大于等于了终点下标说明可以到达最后一个位置直接 return true 。贪心算法局部最优解每次取最大跳跃步数取最大覆盖范围。整体最优解最后得到整体最大覆盖范围看是否能到终点。时间复杂度: O(n)空间复杂度: O(1) class Solution {
public:bool canJump(vectorint nums) {int cover 0;if(nums.size() 1) return true;for(int i 0; i cover; i) {cover max(i nums[i], cover);if(cover nums.size() - 1) return true;}return false;}
}; 参考链接 代码随想录最买卖股票的佳时机II 跳跃游戏