leetcode
文章平均质量分 60
2021dragon
越努力越幸运
展开
-
leetcode1146. 快照数组
实现支持下列接口的「快照数组」- SnapshotArray。原创 2022-07-07 22:18:23 · 938 阅读 · 18 评论 -
leetcode825. 适龄的朋友
在社交媒体网站上有 n 个用户。给你一个整数数组 ages,其中 ages[i] 是第 i 个用户的年龄。如果下述任意一个条件为真,那么用户 x 将不会向用户 y 发送好友请求。否则,x 将会向 y 发送一条好友请求。注意,如果 x 向 y 发送一条好友请求,y 不必也向 x 发送一条好友请求。另外,用户不会向自己发送好友请求。返回在该社交媒体网站上产生的好友请求总数。...原创 2022-07-03 18:00:45 · 1477 阅读 · 14 评论 -
leetcode621. 任务调度器
给你一个用字符数组 $tasks$ 表示的CPU需要执行的任务列表。其中每个字母表示一种不同种类的任务。任务可以以任意顺序执行,并且每个任务都可以在 1 个单位时间内执行完。在任何一个单位时间,CPU可以完成一个任务,或者处于待命状态。然而,两个相同种类的任务之间必须有长度为整数 $n$ 的冷却时间,因此至少有连续 $n$ 个单位时间内CPU在执行不同的任务,或者在待命状态。你需要计算完成所有任务所需要的最短时间...原创 2022-07-01 17:05:12 · 1484 阅读 · 13 评论 -
leetcode1221. 分割平衡字符串
在一个平衡字符串中,$'L'$ 和 $'R'$ 字符的数量是相同的。给你一个平衡字符串 $s$,请你将它分割成尽可能多的平衡字符串。返回可以通过分割得到的平衡字符串的最大数量。注意:分割得到的每个字符串都必须是平衡字符串,且分割得到的平衡字符串是原字符串的连续子串。...原创 2022-06-24 16:33:15 · 744 阅读 · 9 评论 -
leetcode1337. 矩阵中战斗力最弱的K行
给你一个大小为$m\times n$的矩阵 $mat$,矩阵由若干军人和平民组成,分别用 $1$ 和 $0$ 表示。请你返回矩阵中战斗力最弱的 $k$ 行的索引,按从最弱到最强排序。如果第 $i$ 行的军人数量少于第 $j$ 行,或者两行军人数量相同但 $i$ 小于 $j$,那么我们认为第 $i$ 行的战斗力比第 $j$ 行弱。军人总是排在一行中的靠前位置,也就是说 $1$ 总是出现在 $0$ 之前。......原创 2022-06-21 20:17:04 · 662 阅读 · 15 评论 -
leetcode1002. 查找共用字符
给你一个字符串数组$words$,请你找出所有在$words$的每个字符串中都出现的字符(包括重复字符),并以数组形式返回。你可以按任意顺序返回答案。原创 2022-06-18 13:03:08 · 905 阅读 · 11 评论 -
leetcode2053. 数组中第K个独一无二的字符串
LeetCode系列文章文章目录一、题目描述二、示例三、主体思路四、代码实现一、题目描述 独一无二的字符串指的是在一个数组中只出现过一次的字符串。 给你一个字符串数组 arrarrarr 和一个整数 kkk,请你返回 arrarrarr 中第 kkk 个独一无二的字符串。如果少于 kkk 个独一无二的字符串,那么返回空字符串。 注意,按照字符串在原数组中的顺序找到第 kkk 个独一无二的字符串。二、示例 输入: arr = [“d”, “b”, “c”, “b”, ..原创 2022-06-01 13:14:59 · 464 阅读 · 10 评论 -
leetcode1876. 长度为三且各字符不同的子字符串
LeetCode系列文章文章目录一、题目描述二、示例三、主体思路四、代码实现一、题目描述 如果一个字符串不含有任何重复字符,我们称这个字符串为好字符串。 给你一个字符串 sss,请你返回 sss 中长度为3的好子字符串的数量。 注意,如果相同的好子字符串出现多次,每一次都应该被记入答案之中 (子字符串是一个字符串中连续的字符序列)二、示例 输入: s = “xyzzaz” 输出: 1 解释: 总共有4个长度为3的子字符串:“xyz”,“yzz”,..原创 2022-05-29 10:40:14 · 683 阅读 · 13 评论 -
leetcode389. 找不同
LeetCode系列文章文章目录一、题目描述二、示例三、主体思路1、计数求解2、通过差值求解3、异或运算求解四、代码实现1、计数求解2、通过差值求解3、异或运算求解一、题目描述 给定两个字符串 sss 和 ttt,它们只包含小写字母。 字符串 ttt 由字符串 sss 随机重排,然后在随机位置添加一个字母。 请找出在 ttt 中被添加的字母。二、示例 输入: s = “abcd”, t = “acbed” 输出: “e” 解释: 'e’是那个被添加的字母..原创 2022-05-26 11:48:26 · 613 阅读 · 20 评论 -
leetcode190. 颠倒二进制位
LeetCode系列文章文章目录一、题目描述二、示例三、主体思路1、逐位颠倒2、位运算分治四、代码实现1、逐位颠倒2、位运算分治一、题目描述 给定一个非负整数数组numsnumsnums,numsnumsnums中一半整数是奇数,一半整数是偶数。 对数组进行排序,以便当nums[i]nums[i]nums[i]为奇数时,iii也是奇数;当nums[i]nums[i]nums[i]为偶数时,iii也是偶数。 你可以返回任何满足上述条件的数组作为答案。二、示例 输入: ..原创 2022-05-25 13:14:28 · 610 阅读 · 16 评论 -
leetcode771. 宝石与石头
LeetCode系列文章文章目录一、题目描述二、示例三、主体思路四、代码实现1、利用unordered_set容器2、利用unordered_map容器一、题目描述 给你一个字符串jewelsjewelsjewels代表石头中宝石的类型,另有一个字符串stonesstonesstones代表你拥有的石头。stonesstonesstones中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石。注意:jewelsjewelsjewels和stonesstoness..原创 2022-04-21 21:53:30 · 1094 阅读 · 19 评论 -
leetcode500. 键盘行
LeetCode系列文章文章目录一、题目描述二、示例三、主体思路四、代码实现1、利用关联式容器建立映射2、直接定址法建立映射一、题目描述 给你一个字符串数组wordswordswords,只返回可以使用在美式键盘同一行的字母打印出来的单词。键盘如下图所示:美式键盘中:第一行由字符“qwertyuiop”“qwertyuiop”“qwertyuiop”组成。第二行由字符“asdfghjkl”“asdfghjkl”“asdfghjkl”组成。第三行由字符“zxcvbnm”“zxcvb..原创 2022-04-19 22:22:58 · 1326 阅读 · 27 评论 -
leetcode1441. 用栈操作构建数组
LeetCode系列文章文章目录一、题目描述二、示例三、主体思路四、代码实现一、题目描述给你一个目标数组targettargettarget和一个整数nnn。每次迭代,需要从list={1,2,3,...,n}list=\{1, 2, 3, ..., n\}list={1,2,3,...,n}中依序读取一个数字。 请使用下述操作来构建目标数组targettargettarget:Push:Push:Push:从listlistlist中读取一个新元素,并将其推入数组中。Pop:Pop..原创 2022-04-05 13:48:53 · 949 阅读 · 29 评论 -
leetcode2022. 将一维数组转变成二维数组
LeetCode系列文章文章目录一、题目描述二、示例三、主体思路四、代码实现1、新手用vector2、老手用vector3、大佬用vector一、题目描述给你一个下标从0开始的一维数组original和两个整数m和n,你需要使用original中所有元素创建一个m行n列的二维数组。original中下标从0到n-1(都包含)的元素构成二维数组的第一行,下标从n到2*n-1(都包含)的元素构成二维数组的第二行,依此类推。请你根据上述过程返回一个m×nm \times nm×n的二维数组,如果无..原创 2022-04-02 10:50:06 · 1596 阅读 · 26 评论 -
leetcode922. 按奇偶排序数组Ⅱ
LeetCode系列文章文章目录一、题目描述二、示例三、主体思路四、代码一、题目描述 给定一个非负整数数组nums,nums中一半整数是奇数,一半整数是偶数。 对数组进行排序,以便当nums[i]为奇数时,i也是奇数;当nums[i]为偶数时,i也是偶数。 你可以返回任何满足上述条件的数组作为答案。二、示例 输入: nums = [4, 2, 5, 7] 输出: [4, 5, 2, 7] 解释: [4, 7, 2, 5]、[2, 5, 4, 7]、[2,..原创 2022-03-31 19:13:38 · 971 阅读 · 20 评论 -
面试题 01.06. 字符串压缩
字符串压缩。利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能。比如,字符串aabcccccaaa会变为a2b1c5a3。若“压缩”后的字符串没有变短,则返回原先的字符串。你可以假设字符串中只包含大小写英文字母(a至z)。示例: 输入:“aabcccccaaa” 输出:“a2b1c5a3”思路:该题目主要考察对字符串的操作,我们只需对所给字符串进行遍历,在遍历过程中依次统计字符串中每个字符连续出现的次数,当每遍历到的字符与下一个字符不同或字符串已经遍历完毕时,将当前字符以及该字符连续出原创 2022-03-13 19:01:57 · 586 阅读 · 14 评论 -
leetcode1446. 连续字符
给你一个字符串s,字符串的「能量」定义为:只包含一种字符的最长非空子字符串的长度。给定一个字符串,请你返回字符串的能量。示例: 输入:s = “leetcode” 输出:2思路:要找出字符串中单个字符连续出现的最大次数,我们只需将所给字符串遍历一遍即可。在遍历字符串时用两个变量记录数据:count:当前字符连续出现的次数。max:字符串中字符连续出现次数的最大值。在遍历字符串时,从字符串的第二个字符开始进行遍历,并将count和max的值都先初始化为1,表明字符串中的第一个字符当前出原创 2022-03-08 14:44:25 · 660 阅读 · 10 评论 -
leetcode394. 字符串解码
给定一个经过编码的字符串,返回它解码后的字符串。编码规则为:k[encoded_string],表示其中方括号内部的encoded_string正好重复k次。注意k保证为正整数。你可以认为输入字符串总是有效的;输入字符串没有额外的空格,且输入的方括号总是符合格式要求的。此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数k,例如不会出现像3a或2[4]的输入。示例: 输入:s = “3[a]2[bc]” 输出:“aaabcbc”思路:代码如下:...原创 2022-03-05 08:36:28 · 813 阅读 · 19 评论 -
leetcode2068. 检查两个字符串是否几乎相等
如果两个字符串word1和word2中从'a'到'z'每一个字母出现的频率之差都不超过3,那么我们称这两个字符串word1和word2几乎相等。给你两个长度为n的字符串word1和word2,如果word1和word2几乎相等,请你返回true,否则返回false。注意:一个字母x的出现频率指的是它在字符串中出现的次数。word1和word2的长度相同。word1和word2都只包含小写英文字母。示例: 输入:word1 = “aaaa”, word2 = “bccb” 输出:false思原创 2022-02-25 13:49:52 · 840 阅读 · 22 评论 -
leetcode1704. 判断字符串的两半是否相似
给你一个偶数长度的字符串s,将其拆分成长度相同的两半,前一半为a,后一半为b。两个字符串相似的前提是它们都含有相同数目的元音('a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U')。注意:s可能同时含有大写和小写字母。如果a和b相似,返回true,否则,返回false。示例: 输入:s = “book” 输出:true思路:该题的就是让我们遍历字符串,判断字符串的前半段和后半段是否具有相同数目的元音字母,该题目主要考察两点:遍历字符串。哈希表原创 2022-02-22 18:13:12 · 874 阅读 · 14 评论 -
leetcode242. 有效的字母异位词
给定两个字符串s和t,编写一个函数来判断t是否是s的字母异位词。注意:若s和t中每个字母出现的次数都相同,则称s和t互为字母异位词。s和t仅包含小写字母。示例: 输入:s = “anagram”, t = “nagaram” 输出:true思路一:要判断是否两个字符串中每个字母出现的的次数都相同,我们可以先将这两个字符串按照字母的ASCII码进行排序,若排序后这两个字符串相同,则说明符合要求。说明一下:因为排序后相同的字母挨在一起,不同字母按照ASCII码排为升序或降序,所以满足题原创 2022-02-21 15:50:08 · 522 阅读 · 10 评论 -
leetcode961. 在长度2N的数组中找出重复N次的元素
给你一个整数数组nums,该数组具有以下属性:nums.length == 2*n。nums包含n+1个不同的元素。nums中恰好有一个元素重复n次。找出并返回重复了n次的那个元素。示例: 输入:nums = [1, 2, 3, 3] 输出:3思路:找到目标元素需要对数组进行两次遍历:第一次遍历,统计每个元素出现的次数。第二次遍历,返回出现n次的元素,即目标元素。代码如下:class Solution {public: int repeatedNTimes(vector原创 2022-02-15 10:14:39 · 628 阅读 · 25 评论 -
leetcode884. 两句话中的不常见单词
句子是一串由空格分隔的单词。每个单词仅由小写字母组成。如果某个单词在其中一个句子中恰好出现一次,在另一个句子中却没有出现,那么这个单词就是不常见的。给你两个句子s1和s2,返回所有不常见单词的列表。返回列表中单词可以按任意顺序组织。示例: 输入:s1 = “this apple is sweet”, s2 = “this apple is sour” 输出:[“sweet”, “sour”]思路:该题目还是比较简单的,不常见单词只在一个字符串当中出现过一次,也就是说在两个字符串当中总共只出现过原创 2022-02-06 12:16:56 · 680 阅读 · 22 评论 -
leetcode350. 两个数组的交集Ⅱ
给你两个整数数组nums1和nums2,请你以数组形式返回数组的交集。返回结果中每个元素出现的次数,应与元素在两个数组中都出现的次数一致(如果出现次数不一致,则考虑取较小值)。可以不考虑输出结果的顺序。示例: 输入:nums1 = [1, 2, 2, 1], nums2 = [2, 2] 输出:[2, 2]思路一:排序+双指针代码一://排序+双指针class Solution {public: vector<int> intersect(vector<int>&a原创 2022-01-24 11:41:46 · 1143 阅读 · 12 评论 -
leetcode349. 两个数组的交集
给定两个数组,编写一个函数来计算它们的交集。示例: 输入:nums1 = [1, 2, 2, 1], nums2 = [2, 2] 输出:[2]思路:按照我们做数学题时求交集的方法就行了,但注意在求交集前先分别对两个数组的元素进行去重。求两个数组的交集的步骤可分为以下三步:对nums1当中的元素进行去重,得到序列s1。对nums2当中的元素进行去重,得到序列s2。遍历s1,依次判断s1中的每个元素是否在s2当中出现,若没有出现则为交集元素。代码如下:class Solution {原创 2022-01-04 13:27:59 · 905 阅读 · 28 评论 -
leetcode106. 从中序与后序遍历序列构造二叉树
给定一棵树的中序遍历inorder与后序遍历postorder。请构造二叉树并返回其根结点。示例: 输入:inorder = [9, 3, 15, 20, 7], postorder = [9, 15, 7, 20, 3] 输出:[3, 9, 20, null, null, 15, 7]思路:构建二叉树的方式如下:构建根结点。构建右子树。构建左子树。根据所给后序遍历序列,我们可以依次获得所需构建子树的根结点值,在构建某一子树时,我们可以找出该子树根结点在其中序遍历序列当中的位置,进而原创 2021-12-31 16:06:38 · 395 阅读 · 11 评论 -
leetcode105. 从前序与中序遍历序列构造二叉树
给定一棵树的前序遍历preorder与中序遍历inorder。请构造二叉树并返回其根结点。原创 2021-12-14 08:46:16 · 560 阅读 · 20 评论 -
leetcode102. 二叉树的层序遍历
给你一个二叉树,请你返回其按层序遍历得到的结点值。(即逐层地,从左到右访问所有结点)。原创 2021-12-05 10:31:35 · 987 阅读 · 16 评论 -
leetcode606. 根据二叉树创建字符串
你需要采用前序遍历的方式,将一个二叉树转换成一个由括号和整数组成的字符串。空结点则用一对空括号“()”表示。而且你需要省略所有不影响字符串与原始二叉树之间的一对一映射关系的空括号对。示例: 输入:二叉树:[1, 2, 3, null, 4] 输出:"1(2()(4))(3)"思路:题目要求我们省略所有不影响字符串与原始二叉树之间一对一映射关系的空括号对,也就是只保留必要的空括号对。题目要求采用前序遍历的方式,因此对于一棵不为空的二叉树,我们首先应该将该二叉树的根结点值放入到字符串当中,而对于原创 2021-11-19 09:49:56 · 920 阅读 · 9 评论 -
leetcode215. 数组中的第K个最大元素
给定整数数组nums和整数k,请返回数组中第k个最大的元素。请注意,你需要找的是数组排序后的第k个最大的元素,而不是第k个不同的元素。示例: 输入:[3, 2, 1, 5, 6, 4] 和 k = 2 输出:5思路:代码如下:...原创 2021-09-26 14:12:28 · 939 阅读 · 20 评论 -
leetcode232. 用栈实现队列
请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty)。实现MyQueue类:void push(int x) 将元素x推到队列的末尾。int pop( ) 从队列的开头移除并返回元素。int peek( ) 返回队列开头的元素。bool empty( ) 如果队列为空,返回true;否则,返回false。示例: 输入:[“MyQueue”, “push”, “push”, “peek”, “pop”, “empty”] [原创 2021-09-20 21:47:12 · 552 阅读 · 23 评论 -
leetcode225. 用队列实现栈
请你仅使用两个队列实现一个后进先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop、empty)。实现MyStack类:void push(int x) 将元素x压入栈顶。int pop( ) 移除并返回栈顶元素。int top( ) 返回栈顶元素。bool empty( ) 如果栈是空的,返回true;否则,返回false。示例: 输入:[“MyStack”, “push”, “push”, “top”, “pop”, “empty”] [ [ ], [1]原创 2021-09-12 12:44:39 · 533 阅读 · 12 评论 -
leetcode155. 最小栈
设计一个支持push、pop、top操作,并能在常数时间内检索到最小元素的栈。push(x) —— 将元素x推入栈中。pop( ) —— 删除栈顶的元素。top( ) —— 获取栈顶元素。getMin( ) —— 检索栈中的最小元素。提示: pop、top和getMin操作总是在非空栈是调用。示例: 输入:[“MinStack”, “push”, “push”, “push”, “getMin”, “pop”, “top”, “getMin”] [[ ], [-2], [0], [原创 2021-09-11 20:35:41 · 453 阅读 · 16 评论 -
leetcode150. 逆波兰表达式求值
根据逆波兰表示法,求表达式的值。有效的算符包括+、-、*、/ 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。说明:整数除法只保留整数部分。给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为0的情况。示例: 输入:tokens = [ “2”, “1”, “+”, “3”, “*” ] 输出:9 解释:该算式转化为常见的中缀算术表达式为:( ( 2 + 1 ) ×\times× 3 ) = 9思路:想要解决该题目,我们首先需要知道什么是逆波兰表达式,逆波原创 2021-09-11 08:23:37 · 439 阅读 · 18 评论 -
leetcode260. 只出现一次的数字Ⅲ
给定一个整数数组nums,其中恰好有两个元素只出现一次,其余元素均出现两次。找出只出现一次的那两个元素。你可以按任意顺序返回答案。示例: 输入:nums = [1, 2, 1, 3, 2, 5] 输出:[3, 5]思路:代码如下:...原创 2021-09-05 15:01:27 · 636 阅读 · 8 评论 -
leetcode118. 杨辉三角
给定一个非负整数numRows,生成杨辉三角的前numRows行。示例: 输入:numRows = 5 输出:[[1], [1, 1], [1, 2, 1], [1, 3, 3, 1], [1, 4, 6, 4, 1]]思路:杨辉三角,相信大家都不陌生,杨辉三角第一行有一个数字,依次往下每一行的数字比上一行的多一个,每一行的第一个和最后一个数为1,其余数等于其左上方的数和正上方的数之和。据此,我们使用vector容器可以很容易解决该问题。代码如下:class Solution {publ原创 2021-09-02 10:55:55 · 626 阅读 · 4 评论 -
leetcode137. 只出现一次的数字Ⅱ
给你一个整数数组nums,除某个元素仅出现一次外,其余每个元素都恰出现三次。请你找出并返回那个只出现了一次的元素。示例: 输入:nums = [0, 1, 0, 1, 0, 1, 99] 输出:99思路:因为数组当中存储的是int类型(32个bit位),所以我们可以统计数组当中元素的每个bit位出现1的次数。以传入数组元素为0, 1, 0, 1, 0, 1, 99为例。从右往左,第一个bit位出现1的次数为4,第二个bit为出现1的次数为1,… 。然后将每个bit为出现的次数对3取余,因为数组原创 2021-09-01 08:21:11 · 502 阅读 · 8 评论 -
leetcode26. 删除有序数组中的重复项
给你一个有序数组nums,请你原地删除重复出现的元素,使每个元素只出现一次,返回删除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组,并在使用O(1)的额外空间的条件下完成。示例: 输入:nums = [0, 0, 1, 1, 1, 2, 2, 3, 3, 4] 输出:5, nums = [0, 1, 2, 3, 4]说明:为什么返回数值是整数,但输出的答案是数组呢?因为数组是以引用的方式传递的,这就意味着在函数里修改数组对于调用者是可见的,所以返回时只需返回删除后数组的长度即原创 2021-08-31 10:24:34 · 747 阅读 · 2 评论 -
leetcode136. 只出现一次的数字
给定一个非空整数数组,除了某个元素只出现一次以外,其余元素均出现两次。找出那个只出现一次的元素。说明:你的算法应该具有线性的时间复杂度。你可以不使用额外空间来实现吗?示例: 输入:[2, 2, 1] 输出:1思路:将数组当中的全部元素进行异或(^)操作,最后得到的结果便是只出现一次的元素。因为两个数异或的原则是:相同的二进制位为0,不同的二进制位为1。除此之外,异或还满足交换律和结合律,这样一来,两个相同的数进行异或之后就变成了0,最终剩下的便是只出现一次的数。代码如下:class Sol原创 2021-08-30 10:17:43 · 472 阅读 · 4 评论 -
leetcode43. 字符串相乘
给定两个以字符串形式表示的非负整数num1和num2,返回num1和num2的乘积,它们的乘积也表示为字符串形式。示例: 输入:num1 = “12”,num2 = “34” 输出:“408”说明:num1和num2的长度小于110。num1和num2只包含数字0~9。num1和num2均不以零开头,除非是数字0本身。不能使用任何标准库的大整数类型(比如BigInteger)或直接将输入转换为整数来处理。思路:代码如下:...原创 2021-08-26 09:51:14 · 1890 阅读 · 12 评论