摘要: 如果值有重复,就一直往下走即可,直至 head -val != head -> next -> val. 用一个变量来表示是否有值出现过,没有出现过才加入答案。 并且 因为是对原链表的链接, 而原链表结点可能有后续结点, 但后续结点是需要删除的. 所以最后要 cur -> next = nullpt 阅读全文
posted @ 2021-09-20 20:26 rookie_Acmer 阅读(27) 评论(0) 推荐(0) 编辑
摘要: dfs 可以很好的解决这个问题。 主要是如何去重: ① 哈希去重,不过会带来一定的复杂度 ② 先对数组排序,看代码: class Solution { public: vector<vector<int>> combinationSum2(vector<int>& candidates, int t 阅读全文
posted @ 2021-09-20 20:03 rookie_Acmer 阅读(32) 评论(0) 推荐(0) 编辑
摘要: 二分答案即可。 class Solution { public: int minEatingSpeed(const vector<int>& piles, int h) { int l = 1, r = 0; for(int i = 0; i < piles.size(); ++ i) { r = 阅读全文
posted @ 2021-09-20 19:06 rookie_Acmer 阅读(30) 评论(0) 推荐(0) 编辑
摘要: 尺取:如果 nums[r] == 0,如果想要假如这个入答案,那么就需要 --k,如果 k < 0,就只能收缩 l. class Solution { public: int longestOnes(vector<int>& nums, int k) { int ret = 0, l = 0; fo 阅读全文
posted @ 2021-09-20 16:56 rookie_Acmer 阅读(22) 评论(0) 推荐(0) 编辑
摘要: 和前序与中序构造的方式一样。https://www.cnblogs.com/rookie-acmer/p/15302855.html 这里左子树的大小则是 valToPostIndex[preorder[l + 1]] - ll + 1; 而且直接默认右子树也成立就行,因为题目保证至少有一个答案,并 阅读全文
posted @ 2021-09-20 16:31 rookie_Acmer 阅读(28) 评论(0) 推荐(0) 编辑
摘要: 前缀和+贪心+取模就行. 见代码 class Solution { public: bool checkSubarraySum(const vector<int>& nums, int k) { // preSum[i] % k 与其对应的下标的映射. // 贪心: 题目要求子数组次数至少为 2, 阅读全文
posted @ 2021-09-20 15:38 rookie_Acmer 阅读(11) 评论(0) 推荐(0) 编辑
摘要: 使用 4 个互斥锁进行线程同步,假设4个锁分别为 a,b,c,d,对应 fizz, buzz, fizzbuzz, number 四个函数. 由于是从 1 开始进行打印,所以初始化时将 a,b,c 这三个锁锁住,只留下 d 作为入口。 接下来有两种方式: ① 先打印当前的数,然后通过下一个数判断对哪 阅读全文
posted @ 2021-09-20 15:03 rookie_Acmer 阅读(72) 评论(0) 推荐(0) 编辑
摘要: dp[i][0] 表示前 i 个数不偷 i 位置的最大和,dp[i][1] 表示前 i 个数偷 i 位置的最大和 然后这个题是首尾相连的,所以,做两次 dp 就行,两次 dp 的下标范围为 [0, size - 2] 与 [1, size - 1] class Solution { public: 阅读全文
posted @ 2021-09-20 13:31 rookie_Acmer 阅读(8) 评论(0) 推荐(0) 编辑
摘要: 直接 dfs 遍历提前判断叶子结点就行了,没特别的。 class Solution { public: vector<vector<int>> pathSum(TreeNode* root, int targetSum) { vector<int> path; solve(root, targetS 阅读全文
posted @ 2021-09-20 11:28 rookie_Acmer 阅读(21) 评论(0) 推荐(0) 编辑
摘要: 首先可以确定,每一条对角线其 i + j 的值都是定值,所以可以枚举这个定值;这个定值的范围显然是 [0, n - 1 + m - 1) 然后就是,如果对角线的值为偶数,那么就是从下往上遍历,否则就是从上往下; 对于从上往下的情况,最简单的就是其 i = 0,然后 i 一直递增即可,但显然在后半部分 阅读全文
posted @ 2021-09-20 10:52 rookie_Acmer 阅读(27) 评论(0) 推荐(0) 编辑