
leetcode
打不过我吧
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【leetcode】 120. 三角形最小路径和【动态规划】
120. 三角形最小路径和 class Solution { public: int minimumTotal(vector<vector<int>>& triangle) { int sz = triangle.size(); vector<int> dp(sz+1,0); for(int i = sz-1; i >=0; i--){ for(int j = 0; j &.原创 2020-09-20 23:14:30 · 132 阅读 · 0 评论 -
【leetcode】滑动窗口题目——76最小覆盖子串
参考:滑动窗口套路 题目76. 最小覆盖子串 1 从O(N)时间复杂度可知,暴力forfor是不可以的,O(N)一般想到hashmap。 2 子串问题一般用 动态规划,滑动窗口(双指针) 套用模板 void slidingWindow(string s, string t) { unordered_map<char, int> need, window; for (auto c : t) need[c]++; int left = 0, right = 0; int原创 2020-09-10 15:47:03 · 238 阅读 · 0 评论 -
【leetcode】25. K 个一组翻转链表
25. K 个一组翻转链表 思路: 1 写一个翻转链表的子函数 2 在主函数中,找到翻转的开头和翻转的结尾,然后递归的调用主函数来翻转下一组。 需要注意的是为了不用dummy头结点,只能从后 实现代码: class Solution { public: ListNode* reverseKGroup(ListNode* head, int k) { ListNode* cur = head; for(int i = 0; i < k; i++){原创 2020-09-07 11:05:46 · 140 阅读 · 0 评论 -
【leetcode】92. 反转链表 II
题目描述:92. 反转链表 II 思路: 翻转链表都需要两个指针 pre 和 cur,建立临时节点t = cur->next; cur->next = t->next;//移动指针 t->next = pre ->next;//头插法 pre ->next = t;//移动指针 需要注意的是:m到n的循环操作,要注意的是m到n之间需要操作n-m-1次,所以for(int i= m; i < n; i++) 简单的记住t cur t pre t 实现.原创 2020-08-18 00:07:31 · 112 阅读 · 0 评论 -
【leetcode】110. 平衡二叉树
题目描述:110. 平衡二叉树 思路: 左右子树高度差小于等于1,则平衡,先求高度,再判断是否平衡。递归实现。 易错点在于判断完root是否平衡还要判断root左右孩子节点。 实现代码: /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x原创 2020-08-17 23:52:56 · 267 阅读 · 0 评论 -
【leetcode】460. LFU缓存
题目描述:460 分析: 1 要统计每一个key出现的次数:一个哈希表m来记录当前数据{key, value}和其出现次数之间的映射 2 把相同频率的key都放到一个list中,那么需要另一个哈希表freq来建立频率和一个里面所有key都是当前频率的list之间的映射。 3 由于题目中要我们在O(1)的时间内完成操作,为了快速的定位freq中key的位置,我们再用一个哈希表iter来建立key和freq中key的位置之间的映射。 4 还需要两个变量cap和minFreq,分别来保存cache的原创 2020-08-14 16:17:21 · 208 阅读 · 0 评论 -
【leetcode】146. LRU缓存机制
题目描述:146 参考 分析: LRU(Least Recently Used,最近最少使用)淘汰内存策略,最近使用的根据时间局部性永远放在队首、最不常使用放在队尾,当内存满了的时候淘汰掉不常使用的。 本题要求设计: 1 容量capacity; 2 put(key, val) 方法存入键值对; 时间复杂度为 O(1) 3 get(key) 方法获取 key 对应的 val,如果 key 不存在则返回 -1。时间复杂度为 O(1) 看到O(1)必然想起hashmap的查找,为了删除和插..原创 2020-08-13 14:23:27 · 154 阅读 · 0 评论 -
【leetcode】424. 替换后的最长重复字符
题目描述:424. 替换后的最长重复字符 分析:参考链接,参考链接 首先理解滑动窗口是找到最大连续字符出现的次数 本题意思是可以替换k个字符组成连续的字符串,则判断目前滑动窗口宽度是否大于 出现次数最多的字母个数+k ,大于的话滑动窗口滑动,小于则窗口扩张。 我们维护一个数组int[26]来存储当前窗口中各个字母的出现次数,left表示窗口的左边界,right表示窗口右边界 窗口扩张:left不变,right++ 窗口滑动:left++, right++ historyCharMax保存滑动原创 2020-08-11 00:48:43 · 141 阅读 · 0 评论 -
【leetcode】93. 复原IP地址
题目描述:93. 复原IP地址 思路:ip地址分为四段,每一段转换成int判断是否小于255 因为存在第一个字段开头含有0,例如0、1、1、1,就是非法地址,所以要排除这种情况,grandyang这篇博客十分巧妙的利用重组后的ip长度是否比原来多3,来判断是否开头含0 class Solution { public: vector<string> restoreIpAddresses(string s) { vector<string> res;原创 2020-08-10 00:10:10 · 125 阅读 · 0 评论 -
【leetcode】337. 打家劫舍 III
题目描述:337 解题思路:打家劫舍本质是01背包问题,关注点在于:当前节点值的取舍、对于节点上一状态即左右子节点的状态值。 当前状态值(当前值+不包含左右子节点的最大状态值,左右子节点最大状态值之和)。 class Solution { public: int rob(TreeNode* root) { vector<int> res = dfs(root); return max(res[0], res[1]); } vect原创 2020-08-06 00:52:22 · 125 阅读 · 0 评论 -
【leetcode】每日一点点
要输出二维数组,所以要分层打印加一个变量size,控制每一层输出多少个。之字打印和她类似。 排列组合的题目,动态规划去做。 https://www.cnblogs.com/grandyang/p/4299608.html卡塔兰数数列 类似于地下城勇士那一题,从最底层做动态规划 class Solution { public: int minimumTotal(vector<vector<int>>& triangle) { vec..原创 2020-07-15 01:11:05 · 111 阅读 · 0 评论 -
【leetcode】今日总结
允许重复出现数字,所以unoredered_map,记录<数字,出现次数>,然后遍历nums2数组,如果在map里能找到nums2中元素,对应次数-1,并且放到res中。 递归和非递归,非递归用stack 递归方法。找到终止条件,如果节点为空则返回0。 注意:全局变量res保存最终结果,更新的是左右根三者之和和原来的res中较大者。返回给上层计算是max(左,右)+root->val 递归 递归 异或、右移、与运算 动态规划。注意n=1,n=2,直..原创 2020-07-14 00:39:41 · 126 阅读 · 0 评论 -
【leetcode】174. 地下城游戏
题目:https://leetcode-cn.com/problems/dungeon-game/ 思路: 1,要分清骑士到达某个房间的血量和这个房间的消耗(可能是+也可能是-) 2,考虑到从公主房间离开时候血量>=1,倒退到进入公主房间时候骑士的血量必须要大于公主房间的消耗,即当前骑士血量与前一状态有关,所以考虑动态规划。 3,考虑二维数组dp[i][j]表示第i行第j列房间骑士的总血量,包括 他在当前房间消耗的 和 进入下一个房间(右或者下)需要的; aaaa = min(dp[i+1]原创 2020-07-13 01:06:20 · 159 阅读 · 0 评论 -
leetcode347 前 K 个高频元素
题目描述:leetcode347前 K 个高频元素 思路:将元素加入hashmap建立<数字,频率>的映射,然后借助priority_queue<频率,数字>实现最大堆,取最大堆的k个元素,时间复杂度O(k logN) class Solution { public: vector<int> topKFrequent(vector<int>& nums, int k) { unordered_map<int, int原创 2020-06-24 00:32:16 · 195 阅读 · 0 评论 -
【leetcode】23合并k个有序链表
题目描述: 思路: 代码实现; /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode* mergeKLists(vector<ListNode*&..原创 2020-05-21 21:09:57 · 136 阅读 · 0 评论 -
【leetcode】22括号生成
题目描述: https://leetcode-cn.com/problems/generate-parentheses/ 思路: 代码实现: class Solution { public: vector<string> generateParenthesis(int n) { vector<string> res; helper(n, n, "", res); return res; } void原创 2020-05-20 23:01:10 · 132 阅读 · 0 评论 -
【leetcode】155最小栈
题目描述 https://leetcode-cn.com/problems/min-stack/ 思路 getMin()—— 检索栈中的最小元素。需要辅助栈保存最小值。其他和栈功能相同。 也可以设置变量记录最小值。 代码实现: class MinStack { public: /** initialize your data structure here. */ MinStack() { } void push(int x) { .原创 2020-05-13 00:02:32 · 124 阅读 · 0 评论 -
【leetcode】19 删除链表的倒数第N个节点
题目描述: https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list/submissions/ 思路: 快慢指针。 快指针先走n步, 如果快指针指向nullptr,则删除的是第一个节点,返回head->next, 否则,快慢指针一起走,直到快指针走到尾巴,此时慢指针指向的下一个就是要删除的节点,把慢指针的next移到下一个的下一个。返回头结点。 代码实现: class Solution { public:原创 2020-05-12 23:51:43 · 108 阅读 · 0 评论 -
【leetcode】17 电话号码组合
题目描述: https://leetcode-cn.com/problems/letter-combinations-of-a-phone-number/submissions/ 思路: 代码实现: class Solution { public: vector<string> letterCombinations(string digits) { if(digits.empty()) return {}; vector<stri...原创 2020-05-12 23:00:10 · 191 阅读 · 0 评论 -
【leetcode】236 二叉树的最近公共祖先
题目描述: https://leetcode-cn.com/problems/lowest-common-ancestor-of-a-binary-tree/ 思路: 代码实现: class Solution { public: TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) { if(!root || p == root || q == root) .原创 2020-05-11 22:09:06 · 171 阅读 · 0 评论 -
【leetcode】【hot100】11盛最多水的容器
题目描述: https://leetcode-cn.com/problems/container-with-most-water/ 给你 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点(i,ai) 。在坐标内画 n 条垂直线,垂直线 i的两个端点分别为(i,ai) 和 (i, 0)。找出其中的两条线,使得它们与x轴共同构成的容器可以容纳最多的水。 说明:你不...原创 2020-05-04 11:33:27 · 136 阅读 · 0 评论 -
【leetcode】【hot100】10.正则表达式
题目描述: https://leetcode-cn.com/problems/regular-expression-matching/ 解题思路: 代码实现: class Solution { public: bool isMatch(string s, string p) { if (p.empty()) return s.empty(); i...原创 2020-05-03 15:16:09 · 121 阅读 · 0 评论 -
【leetcode】【hot100】3无重复字符的最长子串
题目描述: https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/ 解题思路: 代码实现: class Solution { public: int lengthOfLongestSubstring(string s) { int len = 0,...原创 2020-05-03 14:19:20 · 123 阅读 · 0 评论 -
leetcode 下一个排列 Next Permutation
实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。 如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。 必须原地修改,只允许使用额外常数空间。 以下是一些例子,输入位于左侧列,其相应输出位于右侧列。1,2,3 → 1,3,23,2,1 → 1,2,31,1,5 → 1,5,1 首先,字典序,参考https://blog.csdn.ne...原创 2018-12-09 21:40:41 · 132 阅读 · 0 评论 -
leetcode remove element移除元素
class Solution { public: int removeElement(vector<int>& nums, int val) { int index = 0; for(int i = 0; i < nums.size(); ++i){ if(nums[i] != val){ ...原创 2018-12-09 19:41:21 · 122 阅读 · 0 评论 -
leetcode 3 sum closest
class Solution { public: int threeSumClosest(vector<int>& nums, int target) { sort(nums.begin(), nums.end()); int cloest = nums[0] + nums[1] + nums[2];...原创 2018-11-27 20:08:50 · 197 阅读 · 0 评论 -
leetcode 3 sum 三数之和
class Solution { public: vector<vector<int>> threeSum(vector<int>& nums) { vector<vector<int>> res; const int target = 0; sort(n...原创 2018-11-27 18:56:45 · 580 阅读 · 0 评论