240
笔下虽有千言,胸中实无一策

随笔分类 -  刷题

Leetcode, Lintcode
摘要:题解 Medium 避免使用 erase ,复杂度较高。 class Solution { public: vector<vector<int>> insert(vector<vector<int>>& intervals, vector<int>& newInterval) { vector<ve 阅读全文
posted @ 2020-10-10 11:23 CasperWin 阅读(114) 评论(0) 推荐(0)
摘要:题解 Hard 动态规划 nums[0 - i]的数组划分乘j份,这是我们要解决的问题。那么如果我们已经知道 nums[0 .. k] (k < i) 划分成 j-1 份的样子,那么这个问题是不是就好解决了。因为最后一份是确定的。所以,以这样的方式划分,最大的那份是 nums[0 - k] 划分 j 阅读全文
posted @ 2020-10-10 10:21 CasperWin 阅读(120) 评论(0) 推荐(0)
摘要:题解 Medium 方法:动态规划 左边 k 个数连续求和,右边倒数 k 个数连续求和。然后,两个数组收尾相加,就是 k 次首、尾抽牌的所有组合。 class Solution { public: int maxScore(vector<int>& cardPoints, int k) { vect 阅读全文
posted @ 2020-10-10 09:25 CasperWin 阅读(173) 评论(0) 推荐(0)
摘要:题解 Hard 方法一:Better Brute Force 思路是好理解的:从左往右遍历,在每一个位置,又从当前位置遍历到数组最后,同时更新 minheight * current_width . 这个方法还不足以通过,但是对后面的85题有启发意义。所以放在这里。 class Solution { 阅读全文
posted @ 2020-10-10 06:40 CasperWin 阅读(131) 评论(0) 推荐(0)
摘要:题解 Hard 方法一:动态规划 取每个位置的最大高度 Maximum Height at Each Point 这道题与84题联系在一起看,完全可以转化成84题的样子。对于每一行,只看其以上的数组元素,把连续的值为1的格子累加起来,就变成 histogram 了。 那么,在每一个值为1的坐标位置上 阅读全文
posted @ 2020-10-10 05:21 CasperWin 阅读(123) 评论(0) 推荐(0)
摘要:题解 Hard 动态规划 这道题是一道很具有代表性的二维动态规划问题,非常具有示范效应,理解了这道题的思路,能够举一反三。 一开始没有思路的时候,用一个小例子手动演算一下很有帮助。 Example: word1: abc, word2: abbc \0 a b b c \0 0 1 2 3 4 a 阅读全文
posted @ 2020-10-10 02:57 CasperWin 阅读(105) 评论(0) 推荐(0)
摘要:题解 Hard Sliding Window 事实证明,掌握套路还是很有用的。用 sliding window 模板套路解决这道题还是比较顺利的,虽然是一道 Hard 级别的题。当然,有一点冗余,可以精简一下。 class Solution { public: int lengthOfLongest 阅读全文
posted @ 2020-10-09 14:22 CasperWin 阅读(118) 评论(0) 推荐(0)
摘要:题解 Hard 动态规划 这道题还确实挺难的,尤其是状态转移方程,不容易想到。 dp[i][j]: i位到j位的子数组能得到的最大值(或最多硬币值)。 这个问题可以继续分解乘子问题: | i | ... | k | ... | j | (k = i ... j) 考虑如果第k位是[i, j]中最后戳 阅读全文
posted @ 2020-10-09 13:52 CasperWin 阅读(128) 评论(0) 推荐(0)
摘要:题解 Medium BFS Tree 是一种特殊的 Graph,节点之间只有一个方向。而这里有从 Target 节点向各个方向,包括父节点方向,遍历的需求。所以利用 Hashmap 先转化成一个无向图。 /** * Definition for a binary tree node. * struc 阅读全文
posted @ 2020-10-09 07:30 CasperWin 阅读(138) 评论(0) 推荐(0)
摘要:class Solution { public: int minKnightMoves(int x, int y) { int steps = 0; unordered_set<string> s; queue<pair<int, int>> q; q.push({0, 0}); s.insert( 阅读全文
posted @ 2020-10-09 07:03 CasperWin 阅读(155) 评论(0) 推荐(0)
摘要:题解 Medium 动态规划 class Solution { public: bool wordBreak(string s, vector<string>& wordDict) { // a + b = s // as long as a true and b true, then s true 阅读全文
posted @ 2020-10-09 02:00 CasperWin 阅读(95) 评论(0) 推荐(0)
摘要:题解 Medium Dynamic Programming 顺利做出来了。说明还是理解了coin的组合方式的。动态规划问题,很多都是排列组合问题的应用。 class Solution { public: int coinChange(vector<int>& coins, int amount) { 阅读全文
posted @ 2020-10-08 09:47 CasperWin 阅读(93) 评论(0) 推荐(0)
摘要:题解 Easy Recursion class Solution { public: int rangeSumBST(TreeNode* root, int L, int R) { if(!root) return 0; if(root->val < L) return rangeSumBST(ro 阅读全文
posted @ 2020-10-08 08:45 CasperWin 阅读(110) 评论(0) 推荐(0)
摘要:题解 Hard Tree, DFS 时隔两年,再次把我难住。作为深度优先搜索或者递归的一道练习题,还是很有价值的。 基本上这道题,递归的变量,有两个,一个是结果,另一个是从当前节点往一个方向延伸的最大和,这个容易想到。但有几处细节容易忽略。 比如在求一侧的最大和的时候,要把加和为负值的支段剪掉,那么 阅读全文
posted @ 2020-10-08 08:42 CasperWin 阅读(121) 评论(0) 推荐(0)
摘要:题解 Medium Tree, Stack 几天之内再次做了一遍,思路依旧会卡壳。看来在栈的运用上还是一个难点,毕竟这个倒序的数据结构比起队列并不如那么直观。不过还是很重要。 思路就是先把左节点依次压入栈中,直到最左边的节点,那么以当前节点为根节点,排序就比较容易了,这和遍历方向是一致的所以,可以把 阅读全文
posted @ 2020-10-08 06:47 CasperWin 阅读(72) 评论(0) 推荐(0)
摘要:题解 Medium BFS /* // Definition for a Node. class Node { public: int val; vector<Node*> children; Node() {} Node(int _val) { val = _val; } Node(int _va 阅读全文
posted @ 2020-10-06 13:21 CasperWin 阅读(163) 评论(0) 推荐(0)
摘要:题解 双指针 三次遍历,但不影响复杂度为O(n)。后面要进行改进。 class Solution { public: int trap(vector<int>& height) { vector<int> max_left(height.size()+2, 0); vector<int> max_r 阅读全文
posted @ 2020-10-03 07:36 CasperWin 阅读(94) 评论(0) 推荐(0)
摘要:题解 Easy Stack class Solution { public: bool isValid(string s) { stack<char> st; int i = 0; while(i < s.size()) { if(s[i] == '(' || s[i] == '[' || s[i] 阅读全文
posted @ 2020-10-03 06:28 CasperWin 阅读(108) 评论(0) 推荐(0)
摘要:题解 Medium Tree + BFS class Solution { public: vector<int> rightSideView(TreeNode* root) { if(!root) return {}; vector<int> ret; queue<TreeNode*> q; q. 阅读全文
posted @ 2020-10-03 05:01 CasperWin 阅读(53) 评论(0) 推荐(0)
摘要:题解 Medium BFS 这道题有点类似Number of Islands,可以用DFS或者BFS,但我觉得要更难一点,因为涉及到更新记忆数组。下面我的做法是用BFS(今天主要是想要练习BFS的套路)。 看了官方给出的答案,我的做法还是有几点值得改进的,其中一点是避免使用了记忆数组。因为从根本上来 阅读全文
posted @ 2020-10-03 04:35 CasperWin 阅读(63) 评论(0) 推荐(0)