![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
leetcode
leetcode刷题
程序媛哪有这么可爱!
这个作者很懒,什么都没留下…
展开
-
<leetcode>1460.通过翻转子数组使两个数组相等——遍历
给你两个长度相同的整数数组 target 和 arr。每一步中,你可以选择 arr 的任意 非空子数组 并将它翻转。你可以执行此过程任意次。如果你能让 arr 变得与 target 相同,返回 True;否则,返回 False。解答:先排序然后判断数组是否相等。原创 2022-08-24 11:21:18 · 191 阅读 · 1 评论 -
<leetcode>655.输出二叉树——DFS
对于放置在矩阵中的每个节点,设对应位置为 res[r][c] ,将其左子节点放置在 res[r+1][c-2height-r-1] ,右子节点放置在 res[r+1][c+2height-r-1]。给你一棵二叉树的根节点 root ,请你构造一个下标从 0 开始、大小为 m x n 的字符串矩阵 res ,用以表示树的 格式化布局。根节点 需要放置在 顶行 的 正中间 ,对应位置为 res[0][(n-1)/2]。树的 高度 为 height ,矩阵的行数 m 应该等于 height + 1。原创 2022-08-22 17:58:27 · 184 阅读 · 0 评论 -
<leetcode>503.下一更大元素——单调栈
给定一个循环数组 nums ( nums[nums.length - 1] 的下一个元素是 nums[0] ),返回 nums 中每个元素的 下一个更大元素。数字 x 的 下一个更大的元素 是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它的下一个更大的数。如果不存在,则输出 -1。原创 2022-08-22 10:25:21 · 163 阅读 · 0 评论 -
<leetcode>654.最大二叉树——递归
给定一个不重复的整数数组 nums。递归地在最大值 左边 的 子数组前缀上 构建左子树。递归地在最大值 右边 的 子数组后缀上 构建右子树。创建一个根节点,其值为 nums 中的最大值。返回 nums 构建的 最大二叉树。原创 2022-08-21 16:33:44 · 140 阅读 · 0 评论 -
<leetcode>1450.在既定时间做作业的学生人数——遍历
请返回在查询时间 queryTime 时正在做作业的学生人数。形式上,返回能够使 queryTime 处于区间 [startTime[i], endTime[i]](含)的学生人数。给你两个整数数组 startTime(开始时间)和 endTime(结束时间),并指定一个整数 queryTime 作为查询时间。已知,第 i 名学生在 startTime[i] 时开始写作业并于 endTime[i] 时完成作业。来源:力扣(LeetCode)原创 2022-08-19 10:58:12 · 72 阅读 · 0 评论 -
<leetcode>28.实现strStr()——字符串
给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串出现的第一个位置(下标从 0 开始)。如果不存在,则返回 -1。对于本题而言,当 needle 是空字符串时我们应当返回 0。这与 C 语言的 strstr() 以及 Java 的 indexOf() 定义相符。当 needle 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。实现 strStr() 函数。来源:力扣(LeetCode)...原创 2022-08-18 17:46:39 · 79 阅读 · 0 评论 -
<leetcode>35.搜索插入位置——二分法
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。请必须使用时间复杂度为 O(log n) 的算法。来源:力扣(LeetCode)...原创 2022-08-18 17:42:47 · 102 阅读 · 0 评论 -
<leetcode>1302.层数最深叶子节点的和——二叉树、深度搜索
给你一棵二叉树的根节点 root ,请你返回 层数最深的叶子节点的和。解答:使用容器与深度优先搜索算法。来源:leetcode。原创 2022-08-18 10:15:59 · 145 阅读 · 0 评论 -
<leetcode>1656.设计有序流——哈希表
如果流存储有 id = ptr 的 (id, value) 对,则找出从 id = ptr 开始的 最长 id 连续递增序列 ,并 按顺序 返回与这些 id 关联的值的列表。原创 2022-08-16 12:15:09 · 98 阅读 · 0 评论 -
<leetcode>1422.分割字符串的最大得分——string
给你一个由若干 0 和 1 组成的字符串 s ,请你计算并返回将该字符串分割成两个 非空 子字符串(即 左 子字符串和 右 子字符串)所能获得的最大得分原创 2022-08-14 12:27:57 · 112 阅读 · 0 评论 -
<leetcode>98.验证二叉搜索树——递归
给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。有效 二叉搜索树定义如下:节点的左子树只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/validate-binary-search-tree解答:递归中序遍历后检测数组是否为升序数组/** * Definition for a binary tree nod原创 2022-04-21 08:43:29 · 159 阅读 · 0 评论 -
<leetcode>1672.最富有客户的资产总量——模拟
给你一个 m x n 的整数网格 accounts ,其中 accounts[i][j] 是第 i 位客户在第 j 家银行托管的资产数量。返回最富有客户所拥有的 资产总量 。客户的 资产总量 就是他们在各家银行托管的资产数量之和。最富有客户就是 资产总量 最大的客户。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/richest-customer-wealth解答:class Solution {public:原创 2022-04-14 09:35:41 · 185 阅读 · 0 评论 -
<leetcode>380.O(1)时间插入、删除和获取随机元素——哈希表
实现RandomizedSet 类:RandomizedSet() 初始化 RandomizedSet 对象bool insert(int val) 当元素 val 不存在时,向集合中插入该项,并返回 true ;否则,返回 false 。bool remove(int val) 当元素 val 存在时,从集合中移除该项,并返回 true ;否则,返回 false 。int getRandom() 随机返回现有集合中的一项(测试用例保证调用此方法时集合中至少存在一个元素)。每个元素应该有 相同的概率原创 2022-04-13 19:57:14 · 196 阅读 · 0 评论 -
<leetcode>701.二叉搜索树中的插入操作——数、迭代
给定二叉搜索树(BST)的根节点 root 和要插入树中的值 value ,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据 保证 ,新值和原始二叉搜索树中的任意节点值都不同。注意,可能存在多种有效的插入方式,只要树在插入后仍保持为二叉搜索树即可。 你可以返回 任意有效的结果 。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/insert-into-a-binary-search-tree解答:/** * Definition原创 2022-04-12 11:06:16 · 114 阅读 · 0 评论 -
<leetcode>700.二叉搜索树中的搜索——树、递归
给定二叉搜索树(BST)的根节点 root 和一个整数值 val。你需要在 BST 中找到节点值等于 val 的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 null 。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/search-in-a-binary-search-tree解答:/** * Definition for a binary tree node. * struct TreeNode { * int va原创 2022-04-12 10:12:30 · 63 阅读 · 0 评论 -
<leetcode>806.写字符串需要的行数——字符串
我们要把给定的字符串 S 从左到右写到每一行上,每一行的最大宽度为100个单位,如果我们在写某个字母的时候会使这行超过了100 个单位,那么我们应该把这个字母写到下一行。我们给定了一个数组 widths ,这个数组 widths[0] 代表 ‘a’ 需要的单位, widths[1] 代表 ‘b’ 需要的单位,…, widths[25] 代表 ‘z’ 需要的单位。现在回答两个问题:至少多少行能放下S,以及最后一行使用的宽度是多少个单位?将你的答案作为长度为2的整数列表返回。来源:力扣(LeetCode)原创 2022-04-12 09:33:49 · 121 阅读 · 0 评论 -
<leetcode>357.统计各位数字都不同的数字个数——动态规划、排列组合
给你一个整数 n ,统计并返回各位数字都不同的数字 x 的个数,其中 0 <= x < 10n 。解答一:动态规划创建一个长度为n+1的数组用来储存第0个和第n个各位数字都不同的数字个数,当前状态由前一个状态组成,故而使用动态规划。具体为,当前状态等于上一个数字个数加上上一个状态与上上一个数字个数之差乘以相应的常数。class Solution {public: int countNumbersWithUniqueDigits(int n) { if(n == 0原创 2022-04-11 11:31:02 · 147 阅读 · 0 评论 -
<leetcode>804.唯一摩尔斯密码词——模拟
国际摩尔斯密码定义一种标准编码方式,将每个字母对应于一个由一系列点和短线组成的字符串, 比如:‘a’ 对应 “.-” ,‘b’ 对应 “-…” ,‘c’ 对应 “-.-.” ,以此类推。为了方便,所有 26 个英文字母的摩尔斯密码表如下:[“.-”,“-…”,“-.-.”,“-…”,“.”,“…-.”,“–.”,“…”,“…”,“.—”,“-.-”,“.-…”,“–”,“-.”,“—”,“.–.”,“–.-”,“.-.”,“…”,“-”,“…-”,“…-”,“.–”,“-…-”,“-.–”,“–…原创 2022-04-10 10:25:24 · 84 阅读 · 0 评论 -
<leetcode>112.路径总和——树
给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true ;否则,返回 false 。叶子节点 是指没有子节点的节点。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/path-sum解答:/** * Definition for a binary tree node. * struct Tree原创 2022-04-09 21:46:03 · 82 阅读 · 0 评论 -
<leetcode>226.翻转二叉树——树
给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。解答:递归/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val原创 2022-04-09 21:15:29 · 69 阅读 · 0 评论 -
<leetcode>429.N叉树的层序遍历——树
给定一个 N 叉树,返回其节点值的层序遍历。(即从左到右,逐层遍历)。树的序列化输入是用层序遍历,每组子节点都由 null 值分隔(参见示例)。解答:/*// Definition for a Node.class Node {public: int val; vector<Node*> children; Node() {} Node(int _val) { val = _val; } Node(int _val原创 2022-04-08 11:15:42 · 73 阅读 · 0 评论 -
<leetcode>796.旋转字符串——模拟
给定两个字符串, s 和 goal。如果在若干次旋转操作之后,s 能变成 goal ,那么返回 true 。s 的 旋转操作 就是将 s 最左边的字符移动到最右边。例如, 若 s = ‘abcde’,在旋转一次之后结果就是’bcdea’ 。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/rotate-string解答:class Solution {public:bool rotateString(string s, string goa原创 2022-04-07 10:36:35 · 87 阅读 · 0 评论 -
<leetcode>682.棒球比赛——模拟
你现在是一场采用特殊赛制棒球比赛的记录员。这场比赛由若干回合组成,过去几回合的得分可能会影响以后几回合的得分。比赛开始时,记录是空白的。你会得到一个记录操作的字符串列表 ops,其中 ops[i] 是你需要记录的第 i 项操作,ops 遵循下述规则:整数 x - 表示本回合新获得分数 x“+” - 表示本回合新获得的得分是前两次得分的总和。题目数据保证记录此操作时前面总是存在两个有效的分数。“D” - 表示本回合新获得的得分是前一次得分的两倍。题目数据保证记录此操作时前面总是存在一个有效的分数。“原创 2022-03-26 09:46:01 · 95 阅读 · 0 评论 -
<leetcode>101.对称二叉树——树、深度优先搜索
给你一个二叉树的根节点 root , 检查它是否轴对称。解答:递归/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), l原创 2022-03-23 13:58:32 · 1238 阅读 · 0 评论 -
<leetcode>104.二叉树的最大深度——数、深度优先搜索
给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。解答:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {}原创 2022-03-22 11:18:52 · 93 阅读 · 0 评论 -
<leetcode>2038.如果相邻两个颜色均相同则删除当前颜色——贪心
总共有 n 个颜色片段排成一列,每个颜色片段要么是 ‘A’ 要么是 ‘B’ 。给你一个长度为 n 的字符串 colors ,其中 colors[i] 表示第 i 个颜色片段的颜色。Alice 和 Bob 在玩一个游戏,他们 轮流 从这个字符串中删除颜色。Alice 先手 。如果一个颜色片段为 ‘A’ 且 相邻两个颜色 都是颜色 ‘A’ ,那么 Alice 可以删除该颜色片段。Alice 不可以 删除任何颜色 ‘B’ 片段。如果一个颜色片段为 ‘B’ 且 相邻两个颜色 都是颜色 ‘B’ ,那么 Bob原创 2022-03-22 10:32:07 · 4120 阅读 · 0 评论 -
<leetcode>167.两数之和II-输入有序数组——双指针、二分法
给你一个下标从 1 开始的整数数组 numbers ,该数组已按 非递减顺序排列 ,请你从数组中找出满足相加之和等于目标数 target 的两个数。如果设这两个数分别是 numbers[index1] 和 numbers[index2] ,则 1 <= index1 < index2 <= numbers.length 。以长度为 2 的整数数组 [index1, index2] 的形式返回这两个整数的下标 index1 和 index2。你可以假设每个输入 只对应唯一的答案 ,而且转载 2022-03-21 11:47:04 · 137 阅读 · 0 评论 -
<leetcode>653.两数之和IV-输入BST——树、深度优先搜索、递归
给定一个二叉搜索树 root 和一个目标结果 k,如果 BST 中存在两个元素且它们的和等于给定的目标结果,则返回 true。补充知识:1、二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。二叉搜索树作为一种经典的数据结构,它既有链表的快速插入与删除操作的特点,又有原创 2022-03-21 11:11:19 · 92 阅读 · 0 评论 -
<leetcode>102.二叉树的层序遍历——树、递归、DFS、BFS
给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。解答:递归、深度优先搜索/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} *原创 2022-03-20 10:15:39 · 1435 阅读 · 0 评论 -
<leetcode>606.根据二叉树创建字符串——树、迭代、递归
你需要采用前序遍历的方式,将一个二叉树转换成一个由括号和整数组成的字符串。空节点则用一对空括号 “()” 表示。而且你需要省略所有不影响字符串与原始二叉树之间的一对一映射关系的空括号对。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/construct-string-from-binary-tree解答:递归/** * Definition for a binary tree node. * struct TreeNode { *原创 2022-03-19 09:01:59 · 98 阅读 · 0 评论 -
<leetcode>2043.简易银行系统——类
你的任务是为一个很受欢迎的银行设计一款程序,以自动化执行所有传入的交易(转账,存款和取款)。银行共有 n 个账户,编号从 1 到 n 。每个账号的初始余额存储在一个下标从 0 开始的整数数组 balance 中,其中第 (i + 1) 个账户的初始余额是 balance[i] 。请你执行所有 有效的 交易。如果满足下面全部条件,则交易 有效 :指定的账户数量在 1 和 n 之间,且取款或者转账需要的钱的总数 小于或者等于 账户余额。实现 Bank 类:Bank(long[] balance) 使用原创 2022-03-18 16:03:20 · 97 阅读 · 0 评论 -
<leetcode>145.二叉树的后序遍历——递归、迭代
给你一棵二叉树的根节点 root ,返回其节点值的 后序遍历 。解答:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x),原创 2022-03-18 10:34:29 · 1135 阅读 · 0 评论 -
<leetcode>720.词典中最长的单词——字符串
给出一个字符串数组 words 组成的一本英语词典。返回 words 中最长的一个单词,该单词是由 words 词典中其他单词逐步添加一个字母组成。若其中有多个可行的答案,则返回答案中字典序最小的单词。若无答案,则返回空字符串。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/longest-word-in-dictionary解答:模拟class Solution {public: string longestWord(vector&原创 2022-03-18 08:53:41 · 255 阅读 · 0 评论 -
<leetcode>94.二叉树的中序遍历——递归、迭代
给定一个二叉树的根节点 root ,返回它的 中序 遍历。解答:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), le原创 2022-03-16 20:27:43 · 59 阅读 · 0 评论 -
<leetcode>144.二叉树的前序遍历——树、递归、迭代
给你二叉树的根节点 root ,返回它节点值的 前序 遍历。输入:root = [1,null,2,3]输出:[1,2,3]输入:root = []输出:[]输入:root = [1]输出:[1]输入:root = [1,2]输出:[1,2]解答:递归:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode原创 2022-03-16 16:40:01 · 886 阅读 · 0 评论 -
<leetcode>232.用栈实现队列——队列
请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty):实现 MyQueue 类:void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移除并返回元素int peek() 返回队列开头的元素boolean empty() 如果队列为空,返回 true ;否则,返回 false说明:你 只能 使用标准的栈操作 —— 也就是只有 push to top, peek/pop from top, size,原创 2022-03-16 09:40:38 · 119 阅读 · 0 评论 -
<leetcode>83.删除排序链表中的重复元素——链表
给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。解答:class Solution {public: ListNode* deleteDuplicates(ListNode* head) { if(head==nullptr) return head; // set<int> dictionary; struct ListNode* ans; ans = hea原创 2022-03-15 09:23:49 · 1061 阅读 · 0 评论 -
<leetcode>599.两个列表的最小索引总和——字符串
假设 Andy 和 Doris 想在晚餐时选择一家餐厅,并且他们都有一个表示最喜爱餐厅的列表,每个餐厅的名字用字符串表示。你需要帮助他们用最少的索引和找出他们共同喜爱的餐厅。 如果答案不止一个,则输出所有答案并且不考虑顺序。 你可以假设答案总是存在。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/minimum-index-sum-of-two-lists解答一:暴力循环class Solution {public: vector&l原创 2022-03-14 09:43:09 · 83 阅读 · 0 评论 -
<leetcode>203.移除链表元素——链表、迭代、递归
给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。输入:head = [1,2,6,3,4,5,6], val = 6输出:[1,2,3,4,5]解答一:迭代/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0原创 2022-03-13 23:00:29 · 526 阅读 · 0 评论 -
<leetcode>141.环形链表——链表
给你一个链表的头节点 head ,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。注意:pos 不作为参数进行传递 。仅仅是为了标识链表的实际情况。如果链表中存在环 ,则返回 true 。 否则,返回 false 。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/linked-list-c原创 2022-03-12 18:06:43 · 104 阅读 · 0 评论