
leetcode
喜欢打篮球的普通人
这个作者很懒,什么都没留下…
展开
-
10.正则表达式匹配
文章目录1.题目2.代码1.题目题目要求,「手画图解」动态规划,需要仔细的分情况讨论eg:示例 2:输入:s = "aa" p = "a*"输出:true解释:因为 '*' 代表可以匹配零个或多个前面的那一个元素, 在这里前面的元素就是 'a'。因此,字符串 "aa" 可被视为 'a' 重复了一次。思路:不使用DP星号匹配到s串中的位置,使用 iStart 来表示;p串中星号的位置很重要,用 jStar 来表示;再用两个变量i和j分别指向当前s串和p串中遍历到的位置;思路原创 2022-02-07 10:36:33 · 360 阅读 · 0 评论 -
406. 根据身高重建队列
文章目录1.题目2.代码1.题目题目要求eg:示例 1:输入:people = [[7,0],[4,4],[7,1],[5,0],[6,1],[5,2]]输出:[[5,0],[7,0],[5,2],[6,1],[4,4],[7,1]]解释:编号为 0 的人身高为 5 ,没有身高更高或者相同的人排在他前面。编号为 1 的人身高为 7 ,没有身高更高或者相同的人排在他前面。编号为 2 的人身高为 5 ,有 2 个身高更高或者相同的人排在他前面,即编号为 0 和 1 的人。编号为 3原创 2022-02-06 20:53:44 · 684 阅读 · 0 评论 -
437. 路径总和 III
文章目录1.题目2.代码1.题目题目要求eg:输入:root = [10,5,-3,3,2,null,11,3,-2,null,1], targetSum = 8输出:3解释:和等于 8 的路径有 3 条,如图所示。2.代码struct TreeNode{ int val; TreeNode* left; TreeNode* right; TreeNode(): val(0),left(NULL),right(NULL) {} TreeNode(int val): val(原创 2022-02-03 21:00:59 · 398 阅读 · 0 评论 -
438. 找到字符串中所有字母异位词
文章目录1.题目2.代码1.题目题目要求思路1:将异位词(异位词就是字符种类个数均相同但是顺序可以不同的两个词)作为字符统计来做。2.代码思路1class Solution {public: vector<int> findAnagrams(string s, string p) { int sn=s.size(); int pn=p.size(); vector<int> res,count(128,0); //词频原创 2022-02-03 13:46:14 · 5242 阅读 · 0 评论 -
448. 找到所有数组中消失的数字
文章目录1.题目2.代码1.题目题目要求思路:本地化哈希由于nums 的长度恰好也为 n,能让 nums 充当哈希表,且nums 的数字范围均在 [1,n]中,我们可以利用这一范围之外的数字,来表达「是否存在」的含义。2.代码class Solution {public: vector<int> findDisappearedNumbers(vector<int>& nums) { int n=nums.size(); for (int i=原创 2022-02-03 10:40:23 · 514 阅读 · 0 评论 -
461. 汉明距离
文章目录1.题目2.代码1.题目题目要求思路:两个数字之间的汉明距离就是其二进制数对应位不同的个数,那么最直接了当的做法就是按位分别取出两个数对应位上的数并异或,我们知道异或的性质上相同的为0,不同的为1,我们只要把为1的情况累加起来就是汉明距离了2.代码class Solution {public: int hammingDistance(int x, int y) { int res=0; for (int i=0;i<32;++i) { if ((x &原创 2022-02-02 09:33:40 · 347 阅读 · 0 评论 -
494. 目标和
文章目录1.题目2.代码1.题目题目要求思路:eg:递归,从第一个数字,调用递归函数,在递归函数中,分别对目标值进行加上当前数字调用递归,和减去当前数字调用递归,这样会涵盖所有情况,并且当所有数字遍历完成后,若目标值为0了,则结果 res 自增1示例 1:输入:nums = [1,1,1,1,1], target = 3输出:5解释:一共有 5 种方法让最终目标和为 3 。-1 + 1 + 1 + 1 + 1 = 3+1 - 1 + 1 + 1 + 1 = 3+1 + 1 - 1原创 2022-01-31 16:56:04 · 467 阅读 · 0 评论 -
538. 把二叉搜索树转换为累加树
文章目录1.题目2.代码1.题目题目要求:538. 把二叉搜索树转换为累加树,把二叉搜索树转换为累加树思路:中序遍历的变种二叉搜索树是一棵空树,或者是具有下列性质的二叉树:若它的左子树不空,则左子树上所有节点的值均小于它的根节点的值;若它的右子树不空,则右子树上所有节点的值均大于它的根节点的值;它的左、右子树也分别为二叉搜索树。由这样的性质我们可以发现,二叉搜索树的中序遍历是一个单调递增的有序序列。如果我们反序地中序遍历该二叉搜索树,即可得到一个单调递减的有序序列。2.代码struc原创 2022-01-31 11:39:28 · 531 阅读 · 0 评论 -
581. 最短无序连续子数组
文章目录1.题目2.代码1.题目题目要求eg:示例 1:输入:nums = [2,6,4,8,10,9,15]输出:5解释:你只需要对 [6, 4, 8, 10, 9] 进行升序排序,那么整个表都会变为升序排序。示例 2:输入:nums = [1,2,3,4]输出:0示例 3:输入:nums = [1]输出:0思路:使用辅助数组新建一个跟原数组一摸一样的数组,然后排序。从数组起始位置开始,两个数组相互比较,当对应位置数字不同的时候停止;同理再从末尾开始,对应位原创 2022-01-24 08:55:00 · 377 阅读 · 0 评论 -
621. 任务调度器
文章目录1.题目2.代码1.题目题目要求eg:输入: tasks = ["A","A","A","B","B","B"], n = 2输出: 8执行顺序: A -> B -> (待命) -> A -> B -> (待命) -> A -> B.题目解释:链接这道题目不需要去再次刷,题目的技巧性太强2.代码所以整体的解题步骤如下:计算每个任务出现的次数找出出现次数最多的任务,假设出现次数为 x计算至少需要的时间 (x - 1)原创 2022-01-21 09:56:49 · 4442 阅读 · 0 评论 -
617. 合并二叉树
文章目录1.题目2.代码1.题目题目要求eg:示例 1:输入: Tree 1 Tree 2 1 2 / \ / \ 3 2原创 2022-01-20 20:22:52 · 268 阅读 · 0 评论 -
739. 每日温度
文章目录1.题目2.代码1.题目题目要求eg:示例 1:输入: temperatures = [73,74,75,71,69,72,76,73]输出: [1,1,4,2,1,1,0,0]示例 2:输入: temperatures = [30,40,50,60]输出: [1,1,1,0]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/daily-temperatures著作权归领扣网络所有。商业转载请联系官方授权,非商业转原创 2022-01-20 19:54:26 · 2953 阅读 · 0 评论 -
647. 回文子串
文章目录1.题目2.代码1.题目题目要求eg:Example 1:Input: "abc"Output: 3Explanation: Three palindromic strings: "a", "b", "c". Example 2:Input: "aaa"Output: 6Explanation: Six palindromic strings: "a", "a", "a", "aa", "aa", "aaa".思路:递归思想以字符串中的每一个字符都当作回文串原创 2022-01-20 09:06:32 · 3394 阅读 · 0 评论 -
543. 二叉树的直径
文章目录1.题目2.代码1.题目题目要求2.代码原创 2022-01-19 11:25:34 · 555 阅读 · 0 评论 -
208. 实现 Trie (前缀树)
文章目录1.题目2.代码1.题目题目链接前缀树即字典树、单词查找树字典树主要有如下三点性质:1.根节点不包含字符,除根节点意外每个节点只包含一个字符。2.从根节点到某一个节点,路径上经过的字符连接起来,为该节点对应的字符串。3.每个节点的所有子节点包含的字符串不相同。例如,一个保存了8个键的trie结构,“A”, “to”, “tea”, “ted”, “ten”, “i”, “in”, and “inn”,如下图所示:思路(1)字母树的插入(Insert)、删除( Delete)和原创 2022-01-18 11:10:21 · 117 阅读 · 0 评论 -
5.4.6每个节点的右向指针
文章目录1.题目2.代码1.题目题目要求eg:For example, Given the following perfect binary tree,1/ \2 3/ \ / \4 5 6 7After calling your function, the tree should look like:1 -> NULL/ \2 -> 3 -> NULL/ \ / \4->5->6->7 -> NULL思路:是完美二叉原创 2022-01-14 09:45:37 · 104 阅读 · 0 评论 -
5.4.5求二叉树的最大路径和
文章目录1.题目2.代码1.题目题目要求eg:Example 1:Input: [1,2,3] 1 / \ 2 3Output: 6Example 2:Input: [-10,9,20,null,null,15,7] -10 / \ 9 20 / \ 15 7Output: 42思路:难点在于:起始位置和结束位置可以为任意位置;使用DFS,返回值不是很理解:返回值的定义是以当前结点为终点的原创 2022-01-13 09:29:10 · 161 阅读 · 0 评论 -
5.4.3二叉树的路径和
文章目录1.题目2.代码1.题目题目要求eg:Example:Given the below binary tree and sum = 22, 5 / \ 4 8 / / \ 11 13 4 / \ \7 2 1return true, as there exist a root-to-leaf path 5->4->11->2 which sum is 22.递归写法要求:(原创 2022-01-12 09:20:04 · 216 阅读 · 0 评论 -
5.4.2二叉树的最大深度
文章目录1.题目2.代码1.题目题目要求eg:Example:Given binary tree [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7return its depth = 3.思路:求二叉树的最大深度问题用到深度优先搜索 Depth First Search,递归的完美应用,跟求二叉树的最小深度问题原理相同2.代码递归法class Solution{public: int max原创 2022-01-12 08:52:00 · 158 阅读 · 0 评论 -
5.4.1二叉树的最小深度
文章目录1.题目2.代码1.题目题目要求eg:Example:Given binary tree [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7return its minimum depth = 2.Note: A leaf is a node with no children.思路:该题目是:二叉树的经典问题之最小深度问题,即最短路径的节点个数用深度优先搜索 DFS或者层序遍历的方法(记录原创 2022-01-10 09:30:36 · 148 阅读 · 0 评论 -
5.3.1独一无二的二叉搜索树
文章目录1.题目2.代码1.题目题目要求eg:Input: 3Output: 5Explanation:Given n = 3, there are a total of 5 unique BST's: 1 3 3 2 1 \ / / / \ \ 3 2 1 1 3 2 / / \原创 2022-01-07 08:40:31 · 341 阅读 · 0 评论 -
5.2.1由先序和中序遍历建立二叉树
文章目录1.题目2.代码1.题目题目要求思路:题目要求用先序和中序遍历来建立二叉树。eg:For example, givenpreorder = [3,9,20,15,7]inorder = [9,3,15,20,7]Return the following binary tree: 3 / \ 9 20 / \ 15 7eg:下面来看一个例子, 某一二叉树的中序和后序遍历分别为:2.代码class Solutio原创 2022-01-06 09:13:46 · 681 阅读 · 0 评论 -
5.1.8判断相同树
文章目录1.题目2.代码1.题目题目要求思路:判断两棵树是否相同和之前的判断两棵树是否对称都是一样的原理,利用深度优先搜索 DFS 来递归eg:Example 1:Input: 1 1 / \ / \ 2 3 2 3 [1,2,3], [1,2,3]Output: trueExample 2:Input: 1 1 /原创 2022-01-05 09:45:41 · 105 阅读 · 0 评论 -
5.1.7复原二叉搜索树
文章目录1.题目2.代码1.题目题目要求eg:Input: [3,1,4,null,null,2] 3 / \1 4 / 2Output: [2,1,4,null,null,3] 2 / \1 4 / 3思路:结果数组是中序遍历的结果,这道题要求我们复原一个二叉搜索树,说是其中有两个的顺序被调换了,题目要求上说 O(n) 的解法很直观,这种解法需要用到递归,用中序遍历树,并将所有节点存到一个一维向量中,把所有节点值存到另一个一维向量中,原创 2022-01-04 09:49:42 · 334 阅读 · 0 评论 -
5.1.6 二叉树的之字形层序遍历
文章目录1.题目2.代码1.题目题目要求思路:最简单直接的方法就是利用层序遍历,并使用一个变量 cnt 来统计当前的层数(从0开始),将所有的奇数层的结点值进行翻转一下即可egFor example:Given binary tree [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 return its zigzag level order traversal as:[ [3], [20,9原创 2021-12-31 09:29:27 · 209 阅读 · 0 评论 -
5.1.5 Binary Tree Level Order Traversal II
文章目录1.题目2.代码1.题目题目要求思路:将5.1.5二叉树层序遍历进行reverse翻转即可eg:Example 1:Input: root = [3,9,20,null,null,15,7]Output: [[15,7],[9,20],[3]]2.代码递归版class Solution{public: vector<vector<int>> levelOrderBottom(TreeNode* root){ vector<vector&原创 2021-12-30 08:54:39 · 602 阅读 · 0 评论 -
5.1.5二叉树层序遍历
文章目录1.题目2.代码1.题目题目要求For example:Given binary tree {3,9,20,#,#,15,7}, 3 / \ 9 20 / \ 15 7 return its level order traversal as:[ [3], [9,20], [15,7]]思路:迭代法:使用队列,更好理解递归法2.代码迭代法class Solution {public: vector&l原创 2021-12-29 09:15:10 · 259 阅读 · 0 评论 -
5.1.3二叉树的后序遍历
文章目录1.题目2.代码1.题目题目要求思路:后序遍历的顺序是左-右-根2.代码class Solution{public: vector<int> postorderTraversal(TreeNode* root){ vector<int> result; reverseFunction(root,result); return result; } void reverseFunction(TreeNode* node, vector<原创 2021-12-27 09:25:47 · 428 阅读 · 0 评论 -
5.1.2二叉树的中序遍历
文章目录1.题目2.代码1.题目题目要求思路二叉树的中序遍历顺序为左-根-右2.代码class Solution{public: vector<int> result; vector<int> inorderTraversal(TreeNode* root) { transefunction(root); return result; } void transefunction(TreeNode* node){ if (!node) ret原创 2021-12-24 09:51:20 · 811 阅读 · 0 评论 -
5.1.1二叉树的先序遍历
文章目录1.题目2.代码1.题目题目要求思路(1)用到stack来辅助运算。由于先序遍历的顺序是"根-左-右", 算法为:把根节点 push 到栈中;(2)循环检测栈是否为空,若不空,则取出栈顶元素,保存其值,然后看其右子节点是否存在,若存在则 push 到栈中。再看其左子节点,若存在,则 push 到栈中;(3)题目要求不能使用递归eg:输入:root = [1,null,2,3]输出:[1,2,3]2.代码/*Defition for a binary tree node原创 2021-12-23 09:20:41 · 420 阅读 · 0 评论 -
2.2.14LRU最近最少使用页面置换缓存器
文章目录1.题目2.代码1.题目2.代码原创 2021-12-21 08:38:12 · 867 阅读 · 0 评论 -
2.2.13链表重排序
文章目录1.题目2.要求1.题目题目要求思路使用快慢指针找到中间节点,然后断开,把后半截单链表reverse,再合并两个链表2.要求class Solution{public: void recorderList(ListNode* head) { ListNode* slow=head,fast=head; while(fast->next && fast->next-<next) { slow=slow->next;原创 2021-12-20 20:07:40 · 334 阅读 · 0 评论 -
2.2.12 单链表中的环之二
文章目录1.题目2.代码1.题目题目要求思路:该题目需要返回链表环的起始位置2.代码原创 2021-12-16 10:26:14 · 533 阅读 · 0 评论 -
2.2.11单链表中的环
文章目录1.题目2.代码1.题目题目要求思路:(1)用一个哈希表unordered_map<ListNode*,bool> visited,记录每个元素是否被访问过,一旦出现某个元素被重复访问,说明有环,空间复杂度O(n),时间复杂度O(N)(2)这道题是快慢指针的经典应用。只需要设两个指针,一个每次走一步的慢指针和一个每次走两步的快指针,如果链表里有环的话,两个指针最终肯定会相遇。时间复杂度是O(n),空间复杂度O(1);2.代码class Solution{public原创 2021-12-15 08:55:23 · 401 阅读 · 0 评论 -
2.2.10拷贝带有随机指针的链表
文章目录1.题目2.代码1.题目题目要求思路:这道链表的深度拷贝题的难点就在于如何处理随机指针的问题,由于每一个节点都有一个随机指针,这个指针可以为空,也可以指向链表的任意一个节点,如果在每生成一个新节点给其随机指针赋值时,都要去遍历原链表的话,OJ 上肯定会超时,所以可以考虑用 HashMap 来缩短查找时间。第一遍遍历生成所有新节点时同时建立一个原节点和新节点的 HashMap,第二遍给随机指针赋值时,查找时间是常数级。hashmap将旧list的random之间的关系赋值给新的list,原创 2021-12-14 09:41:34 · 628 阅读 · 0 评论 -
2.2.8成对交换节点
1.题目题目要求思路:给定一个链表,交换每两个相邻节点并返回其头部。2.要求不满足题目要求的解答class Solution{public: ListNode* swapPairs(ListNode* head) { ListNode* pre=head; while(pre && pre->next) { swap(pre->val,pre->next->val); pre=pre->next->next;原创 2021-12-13 20:17:06 · 750 阅读 · 0 评论 -
2.2.7移除链表倒数第N个节点
文章目录1.题目2.代码1.题目题目要求思路:题目要求一次遍历解决问题,那么就得想些比较巧妙的方法了。比如首先要考虑的是,如何找到倒数第N个节点,由于只允许一次遍历,所以不能用一次完整的遍历来统计链表中元素的个数,而是遍历到对应位置就应该移除了。那么就需要用两个指针来帮助解题,pre 和 cur 指针。首先 cur 指针先向前走N步,如果此时 cur 指向空,说明N为链表的长度,则需要移除的为首元素,那么此时返回 head->next 即可,如果 cur 存在,再继续往下走,此时 pre原创 2021-12-10 08:53:50 · 242 阅读 · 0 评论 -
4.1.1验证括号字符串
1.题目题目要求思路:这道题让我们验证输入的字符串是否为括号字符串,包括大括号,中括号和小括号。这里需要用一个栈,开始遍历输入字符串,如果当前字符为左半边括号时,则将其压入栈中,如果遇到右半边括号时,若此时栈为空,则直接返回 false,如不为空,则取出栈顶元素,若为对应的左半边括号,则继续循环,反之返回 false。2.代码class Solution{public: bool isValid(string const& s) { stack<char> te原创 2021-12-08 08:49:14 · 524 阅读 · 0 评论 -
3.7通配符匹配
文章目录1.题目2.代码1.题目题目要求2.代码原创 2021-12-06 20:29:30 · 135 阅读 · 0 评论 -
3.6正则表达式匹配
文章目录1.题目2.代码1.题目题目要求思路道题中的*表示之前那个字符可以有0个,1个或是多个,就是说,字符串 a*b,可以表示b或是 aaab,即a的个数任意,这道题的难度要相对之前那一道大一些,分的情况的要复杂一些,需要用递归 Recursion 来解,大概思路见注释(2)2.代码class Solution{public: bool isMatch(string s, string p) { (1)若p为空,若s也为空,返回 true,反之返回 false。 if (p原创 2021-12-06 20:18:30 · 172 阅读 · 0 评论