反转每对括号间的子串
力扣 1190. 反转每对括号间的子串题目说明
给出一个字符串 s(仅含有小写英文字母和括号)。
请你按照从括号内到外的顺序,逐层反转每对匹配括号中的字符串,并返回最终的结果。
注意,您的结果中 不应 包含任何括号。
提示:
0 <= s.length <= 2000
s 中只有小写英文字母和括号
我们确保所有括号都是成对出现的
示例示例 1:
12输入:s = "(abcd)"输出:"dcba"
示例 2:
12输入:s = "(u(love)i)"输出:"iloveu"
示例 3:
12输入:s = "(ed(et(oc))el)"输出:"leetcode"
示例 4:
12输入:s = "a(bcdefghijkl(mno)p)q"输出:"apmnolkjihgfedcbq"
笔者理解此题是一道字符串算法问题,在力扣题库中被定义为中等题。
解法当笔者阅读完此题后,发现此题用栈求解比较合 ...
等式方程的可满足性
力扣 990. 等式方程的可满足性题目说明
给定一个由表示变量之间关系的字符串方程组成的数组,每个字符串方程 equations[i] 的长度为 4,并采用两种不同的形式之一:”a==b” 或 “a!=b”。在这里,a 和 b 是小写字母(不一定不同),表示单字母变量名。
只有当可以将整数分配给变量名,以便满足所有给定的方程时才返回 true,否则返回 false。
提示:
1 <= equations.length <= 500
equations[i].length == 4
equations[i][0] 和 equations[i][3] 是小写字母
equations[i][1] 要么是 =,要么是 !
equations[i][2] 是 =
示例示例 1:
123输入:["a==b","b!=a"]输出:false解释:如果我们指定,a = 1 且 b = 1,那么可以满足第一个方程,但无法满足第二个方程。没有办法分配变量同时满足这两个方程。
示例 2:
123输入:["b==a",&q ...
不相交的线
力扣 1035. 不相交的线题目说明
在两条独立的水平线上按给定的顺序写下 nums1 和 nums2 中的整数。
现在,可以绘制一些连接两个数字 nums1[i] 和 nums2[j] 的直线,这些直线需要同时满足满足:
nums1[i] == nums2[j]
且绘制的直线不与任何其他连线(非水平线)相交。
请注意,连线即使在端点也不能相交:每个数字只能属于一条连线。
以这种方法绘制线条,并返回可以绘制的最大连线数。
提示:
1 <= nums1.length <= 500
1 <= nums2.length <= 500
1 <= nums1[i], nums2[i] <= 2000
示例示例 1:
1234输入:nums1 = [1,4,2], nums2 = [1,2,4]输出:2解释:可以画出两条不交叉的线,如上图所示。 但无法画出第三条不相交的直线,因为从 nums1[1]=4 到 nums2[2]=4 的直线将与从 nums1[2]=2 到 nums2[1]=2 的直线相交。
示例 2:
12输入:nums1 = ...
归并排序
AcWing 787. 归并排序题目说明给定你一个长度为 n 的整数数列。
请你使用归并排序对这个数列按照从小到大进行排序。
并将排好序的数列按顺序输出。
输入格式输入共两行,第一行包含整数 n。
第二行包含 n 个整数(所有整数均在 1∼10^9 范围内),表示整个数列。
输出格式输出共一行,包含 n 个整数,表示排好序的数列。
数据范围1≤n≤100000
输入样例:1253 1 2 4 5
输出样例:11 2 3 4 5
笔者理解此题是一道排序算法问题,在AcWing题库中被定义为简单题。
解法当笔者阅读完此题后,发现此题有多种解法,根据题目所以使用归并排序,归并排序采用分治的思想,将原数组转化为多个小数组进行求解,让我们来看看具体如何实现的吧。
实现1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848 ...
前K个高频单词
力扣 692. 前K个高频单词题目说明
给一非空的单词列表,返回前 k 个出现次数最多的单词。
返回的答案应该按单词出现频率由高到低排序。如果不同的单词有相同出现频率,按字母顺序排序。
提示:
假定 k 总为有效值, 1 ≤ k ≤ 集合元素数。
输入的单词均由小写字母组成。
示例示例 1:
1234输入: ["i", "love", "leetcode", "i", "love", "coding"], k = 2输出: ["i", "love"]解析: "i" 和 "love" 为出现次数最多的两个单词,均为2次。 注意,按字母顺序 "i" 在 "love" 之前。
示例 2:
1234输入: ["the", "day", "is", "sunny" ...
找出第K大的异或坐标值
力扣 1738. 找出第 K 大的异或坐标值题目说明
给你一个二维矩阵 matrix 和一个整数 k ,矩阵大小为 m x n 由非负整数组成。
矩阵中坐标 (a, b) 的 值 可由对所有满足 0 <= i <= a < m 且 0 <= j <= b < n 的元素 matrix[i][j](下标从 0 开始计数)执行异或运算得到。
请你找出 matrix 的所有坐标中第 k 大的值(**k 的值从 1 开始计数**)。
提示:
m == matrix.length
n == matrix[i].length
1 <= m, n <= 1000
0 <= matrix[i][j] <= 106
1 <= k <= m * n
示例示例 1:
123输入:matrix = [[5,2],[1,6]], k = 1输出:7解释:坐标 (0,1) 的值是 5 XOR 2 = 7 ,为最大的值。
示例 2:
123输入:matrix = [[5,2],[1,6]], k = 2输出:5解释:坐标 (0,0 ...
形成两个异或相等数组的三元组数目
力扣 1442. 形成两个异或相等数组的三元组数目题目说明
给你一个整数数组 arr 。
现需要从数组中取三个下标 i、j 和 k ,其中 (0 <= i < j <= k < arr.length) 。
a 和 b 定义如下:
a = arr[i] ^ arr[i + 1] ^ ... ^ arr[j - 1]
b = arr[j] ^ arr[j + 1] ^ ... ^ arr[k]
注意:^ 表示 按位异或 操作。
请返回能够令 a == b 成立的三元组 (i, j , k) 的数目。
提示:
1 <= arr.length <= 300
1 <= arr[i] <= 10^8
示例示例 1:
123输入:arr = [2,3,1,6,7]输出:4解释:满足题意的三元组分别是 (0,1,2), (0,2,2), (2,3,4) 以及 (2,4,4)
示例 2:
12输入:arr = [1,1,1,1,1]输出:10
示例 3:
12输入:arr = [2,3]输出:0
示例 4:
12输入:arr = [1 ...
二叉树的堂兄弟节点
力扣 993. 二叉树的堂兄弟节点题目说明
在二叉树中,根节点位于深度 0 处,每个深度为 k 的节点的子节点位于深度 k+1 处。
如果二叉树的两个节点深度相同,但 父节点不同 ,则它们是一对堂兄弟节点。
我们给出了具有唯一值的二叉树的根节点 root ,以及树中两个不同节点的值 x 和 y 。
只有与值 x 和 y 对应的节点是堂兄弟节点时,才返回 true 。否则,返回 false。
提示:
二叉树的节点数介于 2 到 100 之间。
每个节点的值都是唯一的、范围为 1 到 100 的整数。
示例示例 1:
12输入:root = [1,2,3,4], x = 4, y = 3输出:false
示例 2:
12输入:root = [1,2,3,null,4,null,5], x = 5, y = 4输出:true
示例 3:
12输入:root = [1,2,3,null,4], x = 2, y = 3输出:false
笔者理解此题是一道树算法问题,在力扣题库中被定义为简单题。
解法当笔者阅读完此题后,发现此题只需要知道两个节点的层级和父节点即可,在此处 ...
罗马数字转整数
力扣 13. 罗马数字转整数题目说明
罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。
12345678字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000
例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。
通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况:
I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。
X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。
C 可以放在 ...
整数转罗马数字
力扣 12. 整数转罗马数字题目说明
罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。
12345678字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000
例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。
通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况:
I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。
X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。
C 可以放在 ...








