-
122. 买卖股票的最佳时机 ||
【思路】按照局部最优推出全局最优的思路。局部最优是获得最小买卖单位内的最大利润,就可以在全局最优获得最小买卖单位的最大利润。即当股票价格递增时,就买入第二天卖出。每天对股票进行操作。var maxProfit = function(prices) { // 价格递增的话就每天买入买出 let res = 0; for (let i = 1; i < prices.length; i++) { if (prices[i] - prices[i - 1] > 0) res += prices[i] - prices[i - 1]; } return res; };
-
55. 跳跃游戏
【思路】局部最优:每一次都跳到可以到达的最远距离,全局最优就可以判断是否可以到达终点。var canJump = function(nums) { let cover = 0; for (let i = 0; i <= cover; i++) { cover = Math.max(cover, i + nums[i]); // 目前所能到达的最远距离 if (cover >= nums.length - 1) return true; } return false; };
-
45. 跳跃游戏 ||
【思路】记录这一次和下一次的最大覆盖范围,如果走到了这一步最大的覆盖范围还没走到,那么步数就要加 1,下一步的覆盖范围就变成了当前的覆盖范围,继续循环判断,当覆盖范围比数组长度大或等于时,就说明下一步就可以走到终点。
这道题还是想了蛮久的,感觉有点绕不过来。var jump = function(nums) { let cur = 0, next = 0, res = 0; for (let i = 0; i < nums.length - 1; i++) { next = Math.max(nums[i] + i, next); console.log(next, cur); if (i === cur) { res ++; cur = next; } } return res; }; var jump = function(nums) { if (nums.length === 1) return 0; let cur = 0, // 当前覆盖最远距离下标 res = 0, // 记录当前最大步数 next = 0; // 下一步覆盖最远距离下标 for (let i = 0; i < nums.length; i++) { console.log(i, cur, nums[i] + i, next); next = Math.max(nums[i] + i, next); // 更新下一步覆盖最远距离 if (i === cur) { // 更新下一步覆盖最远距离下标 if (cur !== nums.length - 1) { // 如果当前覆盖最远距离下标不是终点 res++; // 走下一步 cur = next; // 更新当前覆盖最远距离下标 if (next >= nums.length - 1) break; } else break; } } return res; }
leetcode 刷题 log day 32
最新推荐文章于 2024-08-29 22:36:09 发布