diff --git a/Week_04/id_39/LeetCode_309_39.js b/Week_04/id_39/LeetCode_309_39.js new file mode 100644 index 00000000..1e81efbc --- /dev/null +++ b/Week_04/id_39/LeetCode_309_39.js @@ -0,0 +1,15 @@ +/** + * @param {number[]} prices + * @return {number} + * https://leetcode.com/problems/best-time-to-buy-and-sell-stock-with-cooldown/ + * 只考虑前一天 + */ +var maxProfit = function(prices) { + let sell = [0], buy = [-prices[0]], cool = [0]; + for (let i = 1; i < prices.length; i++) { + sell[i] = Math.max(buy[i-1] + prices[i], sell[i-1]); + buy[i] = Math.max(cool[i-1] - prices[i], buy[i-1]); + cool[i] = Math.max(sell[i-1], buy[i-1], cool[i-1]); + } + return sell[sell.length-1]; +}; \ No newline at end of file diff --git a/Week_04/id_39/LeetCode_70_39.js b/Week_04/id_39/LeetCode_70_39.js new file mode 100644 index 00000000..aae5d9eb --- /dev/null +++ b/Week_04/id_39/LeetCode_70_39.js @@ -0,0 +1,12 @@ +/** + * @param {number} n + * @return {number} + * https://leetcode.com/problems/climbing-stairs/ + */ +var climbStairs = function(n) { + let dp = [0, 1, 2]; + for (let i = 3; i <= n; i++) { + dp[i] = dp[i-1] + dp[i-2]; + } + return dp[n]; +}; \ No newline at end of file diff --git a/Week_04/id_39/LeetCode_84_39.js b/Week_04/id_39/LeetCode_84_39.js new file mode 100644 index 00000000..893e88cf --- /dev/null +++ b/Week_04/id_39/LeetCode_84_39.js @@ -0,0 +1,35 @@ +/** + * @param {number[]} heights + * @return {number} + * https://leetcode.com/problems/largest-rectangle-in-histogram/ + * 回顾第一周视频,以栈的解法解答该题目 + */ +class newStack { + constructor () { + this.arr = [...arguments]; + } + peek () { + return this.arr[this.arr.length - 1]; + } + push (node) { + this.arr.push(node); + } + pop () { + return this.arr.pop(); + } +} + +var largestRectangleArea = function(heights) { + let stack = new newStack(-1), maxArea = 0; + + for (let i = 0; i < heights.length; i++) { + while(heights[i] < heights[stack.peek()] && stack.peek() != -1) { + maxArea = Math.max(maxArea, heights[stack.pop()] * (i - stack.peek() - 1 )); + } + stack.push(i); + } + while (stack.peek() != -1) { + maxArea = Math.max(maxArea, heights[stack.pop()] * (heights.length - stack.peek() - 1 )); + } + return maxArea; +}; \ No newline at end of file diff --git a/Week_04/id_39/NOTE.md b/Week_04/id_39/NOTE.md index 107ea7d6..dadb935a 100644 --- a/Week_04/id_39/NOTE.md +++ b/Week_04/id_39/NOTE.md @@ -1 +1,6 @@ # 学习笔记 + +- 这周把之前的用单调栈求解面积的视频又看了一遍,并做了代码实现,还是有点小迷糊,还是得多做 +- DP的题目 + - 思路都是从结果开始考虑,找子问题,看能不能倒推回去 + - 不过边界限制条件不太好想,得多写多练才可以 \ No newline at end of file