广州网站推广模板,怎么做网站写书,电子版简历免费的,如何用wordpress做一个企业网站122.买卖股票的最佳时机II 本题解法很巧妙#xff0c;大家可以看题思考一下#xff0c;在看题解。 代码随想录P 只收集每天的正利润#xff0c;利润可以每天分解。 Python: class Solution:def maxProfit(self, prices: List[int]) - int:if len(prices)2: retur…122.买卖股票的最佳时机II 本题解法很巧妙大家可以看题思考一下在看题解。 代码随想录P 只收集每天的正利润利润可以每天分解。 Python: class Solution:def maxProfit(self, prices: List[int]) - int:if len(prices)2: return 0maxProfit 0curProfit 0for i in range(1, len(prices)):curProfit prices[i] - prices[i-1]if curProfit 0:maxProfit curProfitif curProfit 0:curProfit 0return maxProfit C: class Solution {
public:int maxProfit(vectorint prices) {if (prices.size() 2) return 0;int maxProfit 0;int curProfit 0;for (int i1; iprices.size(); i) {curProfit prices[i] - prices[i-1];if (curProfit 0) maxProfit curProfit;if (curProfit 0) curProfit 0;}return maxProfit;}
}; 55. 跳跃游戏 本题如果没接触过很难想到所以不要自己憋时间太久读题思考一会没思路立刻看题解 代码随想录 关键思路 其实跳几步无所谓关键在于可跳的覆盖范围 不一定非要明确一次究竟跳几步每次取最大的跳跃步数这个就是可以跳跃的覆盖范围。 这个范围内别管是怎么跳的反正一定可以跳过来。 Python: Python不支持动态修改for循环中的变量。注意和C版本的对比。 class Solution:def canJump(self, nums: List[int]) - bool:if len(nums)1: return Truecover 0for i in range(len(nums)):if icover:cover max(inums[i], cover)if cover len(nums)-1:return True return False C: class Solution {
public:bool canJump(vectorint nums) {if (nums.size()1) return true;int cover 0;for (int i0; icover; i) { // for循环里的cover是动态修改的cover max(nums[i]i, cover);if (cover nums.size()-1) return true;}return false; }
}; 45.跳跃游戏II 本题同样不容易想出来。贪心就是这样有的时候 会感觉简单到离谱有时候难的不行主要是不容易想到。 代码随想录 局部最优当前可移动距离尽可能多走如果还没到终点步数再加一。 整体最优一步尽可能多走从而达到最少步数。 所以真正解题的时候要从覆盖范围出发不管怎么跳覆盖范围内一定是可以跳到的以最小的步数增加覆盖范围覆盖范围一旦覆盖了终点得到的就是最少步数 移动下标达到了当前覆盖的最远距离下标时步数就要加一来增加覆盖距离。最后的步数就是最少步数。 这里还是有个特殊情况需要考虑当移动下标达到了当前覆盖的最远距离下标时 如果当前覆盖最远距离下标不是是集合终点步数就加一还需要继续走。如果当前覆盖最远距离下标就是是集合终点步数不用加一因为不能再往后走了。 Python: class Solution:def jump(self, nums: List[int]) - int:n len(nums)if n1: return 0cur_cover next_cover 0ans 0for i in range(n):next_cover max(nums[i]i, next_cover)if icur_cover:ans 1cur_cover next_coverif next_cover n-1:breakreturn ans C: class Solution {
public:int jump(vectorint nums) {if (nums.size()1) return 0;int curCover 0;int nextCover 0;int ans 0;for (int i0; inums.size(); i) {nextCover max(nums[i]i, nextCover);if (icurCover) {ans;curCover nextCover;if (nextCovernums.size()-1) break;}}return ans;}
};