![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
leetcode
qq_40707462
这个作者很懒,什么都没留下…
展开
-
leetcode【困难】10、正则表达式匹配
q原创 2022-09-27 16:32:06 · 195 阅读 · 0 评论 -
leetcode【中等】451、根据字符出现频率排序
a原创 2022-09-22 21:42:56 · 196 阅读 · 0 评论 -
leetcode【中等】97、交错字符串
啊原创 2022-09-22 20:20:14 · 124 阅读 · 0 评论 -
leetcode【困难】460、LFU 缓存
a原创 2022-09-21 22:37:21 · 212 阅读 · 0 评论 -
leetcode【中等】328、奇偶链表
。原创 2022-09-21 21:11:18 · 168 阅读 · 0 评论 -
leetcode【中等】875、爱吃香蕉的珂珂
。原创 2022-08-08 16:41:37 · 84 阅读 · 0 评论 -
leetcode【中等】143、重排链表
给定一个单链表 L 的头节点 head ,单链表 L 表示为:L0 → L1 → … → Ln - 1 → Ln请将其重新排列后变为:L0 → Ln → L1 → Ln - 1 → L2 → Ln - 2 → …/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(in原创 2022-03-27 18:56:03 · 683 阅读 · 0 评论 -
java多线程设计
交替打印 n 次,一个线程打印 foo ,另一个打印 barpublic class test { public static void main(String[] args) { //a,b这两个runnable Runnable a = ()->{ System.out.print("foo"); }; Runnable b = ()->{ System.out.p原创 2022-02-09 09:50:01 · 992 阅读 · 0 评论 -
leetcode【中等】861、翻转矩阵后的得分
有一个二维矩阵 A 其中每个元素的值为 0 或 1 。移动是指选择任一行或列,并转换该行或列中的每一个值:将所有 0 都更改为 1,将所有 1 都更改为 0。在做出任意次数的移动后,将该矩阵的每一行都按照二进制数来解释,矩阵的得分就是这些数字的总和。返回尽可能高的分数。示例:输入:[[0,0,1,1],[1,0,1,0],[1,1,0,0]]输出:39解释:转换为 [[1,1,1,1],[1,0,0,1],[1,1,1,1]]0b1111 + 0b1001 + 0b1111 = 15 +原创 2022-03-18 16:32:36 · 294 阅读 · 0 评论 -
leetcode【中等】1508、子数组和排序后的区间和
给你一个数组 nums ,它包含 n 个正整数。你需要计算所有非空连续子数组的和,并将它们按升序排序,得到一个新的包含 n * (n + 1) / 2 个数字的数组。请你返回在新数组中下标为 left 到 right (下标从 1 开始)的所有数字和(包括左右端点)。由于答案可能很大,请你将它对 10^9 + 7 取模后返回。示例 1:输入:nums = [1,2,3,4], n = 4, left = 1, right = 5输出:13 解释:所有的子数组和为 1, 3, 6, 10, 2, 5原创 2022-03-18 13:28:30 · 235 阅读 · 0 评论 -
leetcode【中等】378、有序矩阵中第 K 小的元素
给你一个 n x n 矩阵 matrix ,其中每行和每列元素均按升序排序,找到矩阵中第 k 小的元素。请注意,它是 排序后 的第 k 小元素,而不是第 k 个 不同 的元素。你必须找到一个内存复杂度优于 O(n2) 的解决方案。示例 1:输入:matrix = [[1,5,9],[10,11,13],[12,13,15]], k = 8输出:13解释:矩阵中的元素为 [1,5,9,10,11,12,13,13,15],第 8 小元素是 13思路1:优先队列class Solution {原创 2022-03-18 12:26:04 · 514 阅读 · 0 评论 -
leetcode【中等】208、实现 Trie (前缀树)
Trie(发音类似 “try”)或者说 前缀树 是一种树形数据结构,用于高效地存储和检索字符串数据集中的键。这一数据结构有相当多的应用情景,例如自动补完和拼写检查。请你实现 Trie 类:Trie() 初始化前缀树对象。void insert(String word) 向前缀树中插入字符串 word 。boolean search(String word) 如果字符串 word 在前缀树中,返回 true(即,在检索之前已经插入);否则,返回 false 。boolean startsWith(原创 2022-03-17 17:33:16 · 102 阅读 · 0 评论 -
leetcode【简单】720、词典中最长的单词
给出一个字符串数组 words 组成的一本英语词典。返回 words 中最长的一个单词,该单词是由 words 词典中其他单词逐步添加一个字母组成。(注意,必须从一个字母开始)若其中有多个可行的答案,则返回答案中字典序最小的单词。若无答案,则返回空字符串。示例 1:输入:words = ["w","wo","wor","worl", "world"]输出:"world"解释: 单词"world"可由"w", "wo", "wor", 和 "worl"逐步添加一个字母组成。示例 2:输入:wo原创 2022-03-17 16:57:52 · 409 阅读 · 0 评论 -
leetcode【简单】1684、统计一致字符串的数目
给你一个由不同字符组成的字符串 allowed 和一个字符串数组 words 。如果一个字符串的每一个字符都在 allowed 中,就称这个字符串是 一致字符串 。请你返回 words 数组中 一致字符串 的数目。示例 1:输入:allowed = "ab", words = ["ad","bd","aaab","baa","badab"]输出:2解释:字符串 "aaab" 和 "baa" 都是一致字符串,因为它们只包含字符 'a' 和 'b' 。思路:位运算,注意判断words里的字符是否原创 2022-03-16 21:05:12 · 266 阅读 · 0 评论 -
leetcode【中等】2080、区间内查询数字的频率
区间内查询数字的频率请你设计一个数据结构,它能求出给定子数组内一个给定值的 频率 。子数组中一个值的 频率 指的是这个子数组中这个值的出现次数。请你实现 RangeFreqQuery 类:RangeFreqQuery(int[] arr) 用下标从 0 开始的整数数组 arr 构造一个类的实例。int query(int left, int right, int value) 返回子数组 arr[left…right] 中 value 的 频率 。一个 子数组 指的是数组中一段连续的元素。a.原创 2022-03-16 16:25:14 · 508 阅读 · 0 评论 -
leetcode【中等】1262、可被三整除的最大和
给你一个整数数组 nums,请你找出并返回能被三整除的元素最大和。示例 1:输入:nums = [3,6,5,1,8]输出:18解释:选出数字 3, 6, 1 和 8,它们的和是 18(可被 3 整除的最大和)。示例 2:输入:nums = [4]输出:0解释:4 不能被 3 整除,所以无法选出数字,返回 0。思路:类似三指针,a、b、c 分别记录此时余数为 0、1、2 时的元素最大和class Solution { public int maxSumDivThree(int原创 2022-03-16 14:32:25 · 265 阅读 · 0 评论 -
leetcode【中等】547、省份数量
有 n 个城市,其中一些彼此相连,另一些没有相连。如果城市 a 与城市 b 直接相连,且城市 b 与城市 c 直接相连,那么城市 a 与城市 c 间接相连。省份 是一组直接或间接相连的城市,组内不含其他没有相连的城市。给你一个 n x n 的矩阵 isConnected ,其中 isConnected[i][j] = 1 表示第 i 个城市和第 j 个城市直接相连,而 isConnected[i][j] = 0 表示二者不直接相连。返回矩阵中 省份 的数量。示例 1:输入:isConnected原创 2022-03-16 13:50:13 · 606 阅读 · 0 评论 -
leetcode【中等】658、找到 K 个最接近的元素
给定一个 排序好 的数组 arr ,两个整数 k 和 x ,从数组中找到最靠近 x(两数之差最小)的 k 个数。返回的结果必须要是按升序排好的。整数 a 比整数 b 更接近 x 需要满足:|a - x| < |b - x| 或者|a - x| == |b - x| 且 a < b示例 1:输入:arr = [1,2,3,4,5], k = 4, x = 3输出:[1,2,3,4]示例 2:输入:arr = [1,2,3,4,5], k = 4, x = -1输出:[1,2,3原创 2022-03-16 11:02:45 · 169 阅读 · 0 评论 -
leetcode【中等】842、将数组拆分成斐波那契序列
给定一个数字字符串 num,比如 “123456579”,我们可以将它分成「斐波那契式」的序列 [123, 456, 579]。形式上,斐波那契式 序列是一个非负整数列表 f,且满足:0 <= f[i] < 231 ,(也就是说,每个整数都符合 32 位 有符号整数类型)f.length >= 3对于所有的0 <= i < f.length - 2,都有 f[i] + f[i + 1] = f[i + 2]另外,请注意,将字符串拆分成小块时,每个块的数字一定不要以零原创 2022-03-15 13:42:21 · 152 阅读 · 0 评论 -
leetcode【中等】2044. 统计按位或能得到最大值的子集数目
给你一个整数数组 nums ,请你找出 nums 子集 按位或 可能得到的 最大值 ,并返回按位或能得到最大值的 不同非空子集的数目 。如果数组 a 可以由数组 b 删除一些元素(或不删除)得到,则认为数组 a 是数组 b 的一个 子集 。如果选中的元素下标位置不一样,则认为两个子集 不同 。对数组 a 执行 按位或 ,结果等于 a[0] OR a[1] OR … OR a[a.length - 1](下标从 0 开始)。示例 1:输入:nums = [3,1]输出:2解释:子集按位或能得到的最原创 2022-03-15 10:45:13 · 156 阅读 · 0 评论 -
leetcode【困难】1553、吃掉 N 个橘子的最少天数
厨房里总共有 n 个橘子,你决定每一天选择如下方式之一吃这些橘子:吃掉一个橘子。如果剩余橘子数 n 能被 2 整除,那么你可以吃掉 n/2 个橘子。如果剩余橘子数 n 能被 3 整除,那么你可以吃掉 2*(n/3) 个橘子。每天你只能从以上 3 种方案中选择一种方案。请你返回吃掉所有 n 个橘子的最少天数。示例 1:输入:n = 10输出:4解释:你总共有 10 个橘子。第 1 天:吃 1 个橘子,剩余橘子数 10 - 1 = 9。第 2 天:吃 6 个橘子,剩余橘子数 9 - 2原创 2022-03-14 16:49:32 · 6258 阅读 · 0 评论 -
leetcode【中等】781、森林中的兔子
森林中有未知数量的兔子。提问其中若干只兔子 “还有多少只兔子与你(指被提问的兔子)颜色相同?” ,将答案收集到一个整数数组 answers 中,其中 answers[i] 是第 i 只兔子的回答。给你数组 answers ,返回森林中兔子的最少数量。示例 1:输入:answers = [1,1,2]输出:5解释:两只回答了 "1" 的兔子可能有相同的颜色,设为红色。 之后回答了 "2" 的兔子不会是红色,否则他们的回答会相互矛盾。设回答了 "2" 的兔子为蓝色。 此外,森林中还应有另外 2原创 2022-03-13 19:11:06 · 652 阅读 · 0 评论 -
leetcode【中等】334、递增的三元子序列
给你一个整数数组 nums ,判断这个数组中是否存在长度为 3 的递增子序列。如果存在这样的三元组下标 (i, j, k) 且满足 i < j < k ,使得 nums[i] < nums[j] < nums[k] ,返回 true ;否则,返回 false 。示例 1:输入:nums = [1,2,3,4,5]输出:true解释:任何 i < j < k 的三元组都满足题意示例 2:输入:nums = [5,4,3,2,1]输出:false解释:不存原创 2022-03-13 15:40:35 · 404 阅读 · 0 评论 -
leetcode【中等】2049、统计最高分的节点数目
一个二叉树,parents[i] 是节点 i 的父节点,删除一个节点,拆分成若干子树,求子树的【节点数】的乘积最大值的【个数】输入:parents = [-1,2,0,2,0]输出:3解释:- 节点 0 的分数为:3 * 1 = 3- 节点 1 的分数为:4 = 4- 节点 2 的分数为:1 * 1 * 2 = 2- 节点 3 的分数为:4 = 4- 节点 4 的分数为:4 = 4最高得分为 4 ,有三个节点得分为 4 (分别是节点 1,3 和 4 )。思路:parents[i] 是原创 2022-03-11 11:22:17 · 335 阅读 · 0 评论 -
leetcode【中等】2156、查找给定哈希值的子串
给定整数 p 和 m ,一个长度为 k 且下标从 0 开始的字符串 s 的哈希值按照如下函数计算:hash(s, p, m) = (val(s[0]) * p0 + val(s[1]) * p1 + ... + val(s[k-1]) * pk-1) mod m.其中 val(s[i]) 表示 s[i] 在字母表中的下标,从 val(‘a’) = 1 到 val(‘z’) = 26 。给你一个字符串 s 和整数 power,modulo,k 和 hashValue 。请你返回 s 中 第一个 长度为原创 2022-03-09 16:24:42 · 363 阅读 · 0 评论 -
leetcode【困难】2163、删除元素后和的最小差值
给你一个下标从 0 开始的整数数组 nums ,它包含 3 * n 个元素。你可以从 nums 中删除 恰好 n 个元素,剩下的 2 * n 个元素将会被分成两个 相同大小 的部分。前面 n 个元素属于第一部分,它们的和记为 sumfirst 。后面 n 个元素属于第二部分,它们的和记为 sumsecond 。两部分和的 差值 记为 sumfirst - sumsecond 。比方说,sumfirst = 3 且 sumsecond = 2 ,它们的差值为 1 。再比方,sumfirst = 2原创 2022-03-08 22:36:04 · 272 阅读 · 0 评论 -
leetcode【困难】2167、移除所有载有违禁货物车厢所需的最少时间
给你一个下标从 0 开始的二进制字符串 s ,表示一个列车车厢序列。s[i] = ‘0’ 表示第 i 节车厢 不 含违禁货物,而 s[i] = ‘1’ 表示第 i 节车厢含违禁货物。作为列车长,你需要清理掉所有载有违禁货物的车厢。你可以不限次数执行下述三种操作中的任意一个:从列车 左 端移除一节车厢(即移除 s[0]),用去 1 单位时间。从列车 右 端移除一节车厢(即移除 s[s.length - 1]),用去 1 单位时间。从列车车厢序列的 任意位置 移除一节车厢,用去 2 单位时间。返回移除原创 2022-03-08 21:32:17 · 120 阅读 · 0 评论 -
leetcode【中等】2165、重排数字的最小值
给你一个整数 num 。重排 num 中的各位数字,使其值 最小化 且不含 任何 前导零。返回不含前导零且值最小的重排数字。注意,重排各位数字后,num 的符号不会改变。示例 1:输入:num = 310输出:103解释:310 中各位数字的可行排列有:013、031、103、130、301、310 。不含任何前导零且值最小的重排数字是 103 。示例 2:输入:num = -7605输出:-7650解释:-7605 中各位数字的部分可行排列为:-7650、-6705、-5076、-原创 2022-03-08 20:53:13 · 194 阅读 · 0 评论 -
leetcode【中等】2055、蜡烛之间的盘子
给你一个长桌子,桌子上盘子和蜡烛排成一列。给你一个下标从 0 开始的字符串 s ,它只包含字符 ’ * ’ 和 ‘|’ ,其中 ’ * ’ 表示一个 盘子 ,’|’ 表示一支 蜡烛 。同时给你一个下标从 0 开始的二维整数数组 queries ,其中 queries[i] = [lefti, righti] 表示 子字符串 s[lefti…righti] (包含左右端点的字符)。对于每个查询,你需要找到 子字符串中 在 两支蜡烛之间 的盘子的 数目 。如果一个盘子在 子字符串中 左边和右边 都 至少有一支原创 2022-03-08 17:07:12 · 209 阅读 · 0 评论 -
leetcode【困难】315、计算右侧小于当前元素的个数
给你一个整数数组 nums ,按要求返回一个新数组 counts 。数组 counts 有该性质: counts[i] 的值是 nums[i] 右侧小于 nums[i] 的元素的数量。示例 1:输入:nums = [5,2,6,1]输出:[2,1,1,0] 解释:5 的右侧有 2 个更小的元素 (2 和 1)2 的右侧仅有 1 个更小的元素 (1)6 的右侧有 1 个更小的元素 (1)1 的右侧有 0 个更小的元素示例 2:输入:nums = [-1]输出:[0]class S原创 2022-03-08 16:34:50 · 181 阅读 · 0 评论 -
leetcode【困难】2179、统计数组中好三元组数目
给你两个下标从 0 开始且长度为 n 的整数数组 nums1 和 nums2 ,两者都是 [0, 1, …, n - 1] 的 排列 。好三元组 指的是 3 个 互不相同 的值,且它们在数组 nums1 和 nums2 中出现顺序保持一致。换句话说,如果我们将 pos1v 记为值 v 在 nums1 中出现的位置,pos2v 为值 v 在 nums2 中的位置,那么一个好三元组定义为 0 <= x, y, z <= n - 1 ,且 pos1x < pos1y < pos1z 和原创 2022-03-08 16:11:27 · 495 阅读 · 0 评论 -
leetcode【中等】1395、统计作战单位数
n 名士兵站成一排。每个士兵都有一个 独一无二 的评分 rating 。每 3 个士兵可以组成一个作战单位,分组规则如下:从队伍中选出下标分别为 i、j、k 的 3 名士兵,他们的评分分别为 rating[i]、rating[j]、rating[k]作战单位需满足: rating[i] < rating[j] < rating[k] 或者 rating[i] > rating[j] > rating[k] ,其中 0 <= i < j < k < n原创 2022-03-08 15:09:25 · 275 阅读 · 0 评论 -
leetcode【困难】剑指 Offer 51、数组中的逆序对
在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。示例 1:输入: [7,5,6,4]输出: 5思路1、归并时间复杂度O(NlogN)空间复杂度 O(N) 辅助数组 tmp每当遇到 左子数组当前元素 > 右子数组当前元素 时,意味着 「左子数组当前元素 至 末尾元素」 与 「右子数组当前元素」 构成了若干 「逆序对」在归并排序中,边排序,边计算遇到逆序的个数两两合并示例:总流程:public cla原创 2022-03-08 12:24:26 · 159 阅读 · 0 评论 -
leetcode【困难】1713、得到子序列的最少操作次数
给你一个数组 target ,包含若干 互不相同 的整数,以及另一个整数数组 arr ,arr 可能 包含重复元素。每一次操作中,你可以在 arr 的任意位置插入任一整数。比方说,如果 arr = [1,4,1,2] ,那么你可以在中间添加 3 得到 [1,4,3,1,2] 。你可以在数组最开始或最后面添加整数。请你返回 最少 操作次数,使得 target 成为 arr 的一个子序列。(target中无重复)一个数组的 子序列 指的是删除原数组的某些元素(可能一个元素都不删除),同时不改变其余元素的相原创 2022-03-08 11:22:02 · 120 阅读 · 0 评论 -
leetcode【中等】2192、有向无环图中一个节点的所有祖先
给你一个正整数 n ,它表示一个 有向无环图 中节点的数目,节点编号为 0 到 n - 1 (包括两者)。给你一个二维整数数组 edges ,其中 edges[i] = [fromi, toi] 表示图中一条从 fromi 到 toi 的单向边。请你返回一个数组 answer,其中 answer[i]是第 i 个节点的所有 祖先 ,这些祖先节点 升序 排序。如果 u 通过一系列边,能够到达 v ,那么我们称节点 u 是节点 v 的 祖先 节点。示例 1:输入:n = 8, edgeList =原创 2022-03-07 17:23:27 · 276 阅读 · 0 评论 -
leetcode【中等】91、解码方法 / 剑指 Offer 46、把数字翻译成字符串
一条包含字母 A-Z 的消息通过以下映射进行了 编码 :‘A’ -> “1”‘B’ -> “2”…‘Z’ -> “26”要 解码 已编码的消息,所有数字必须基于上述映射的方法,反向映射回字母(可能有多种方法)。例如,“11106” 可以映射为:"AAJF" ,将消息分组为 (1 1 10 6)"KJF" ,将消息分组为 (11 10 6)注意,消息不能分组为 (1 11 06) ,因为 "06" 不能映射为 "F" ,这是由于 "6" 和 "06" 在映射中并不等价。原创 2022-03-07 14:30:22 · 110 阅读 · 0 评论 -
leetcode【困难】41、缺失的第一个正数
给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。示例 :输入:nums = [1,2,0]输出:3:输入:nums = [3,4,-1,1]输出:2输入:nums = [7,8,9,11,12]输出:1思路:参考:26. 删除排序数组中的重复项【简单】,原地操作如果数组中包含 x ∈[1,N],那么恢复后,数组的第 x−1 个元素为 x。如果数组中的数都大于N,即返回 1,如示例3原创 2022-03-07 11:48:36 · 185 阅读 · 0 评论 -
leetcode【中等】198、213、337、打家劫舍123
198打家劫舍 I你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。示例 1:输入:[1,2,3,1]输出:4解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。 偷窃到的最高金额 = 1 + 3 = 4 。cl原创 2022-03-03 21:36:24 · 8036 阅读 · 0 评论 -
leetcode【中等】919、完全二叉树插入器
完全二叉树 是每一层(除最后一层外)都是完全填充(即,节点数达到最大)的,并且所有的节点都尽可能地集中在左侧。设计一种算法,将一个新节点插入到一个完整的二叉树中,并在插入后保持其完整。实现 CBTInserter 类:CBTInserter(TreeNode root) 使用头节点为 root 的给定树初始化该数据结构;CBTInserter.insert(int v) 向树中插入一个值为 Node.val == val的新节点 TreeNode。使树保持完全二叉树的状态,并返回插入节点 Tree原创 2022-03-03 17:46:34 · 7286 阅读 · 0 评论 -
leetcode【中等】994、腐烂的橘子
在给定的 m x n 网格 grid 中,每个单元格可以有以下三个值之一:值 0 代表空单元格;值 1 代表新鲜橘子;值 2 代表腐烂的橘子。每分钟,腐烂的橘子 周围 4 个方向上相邻 的新鲜橘子都会腐烂。返回 直到单元格中没有新鲜橘子为止所必须经过的最小分钟数。如果不可能,返回 -1 。思路:bfs小技巧:坐标[i,j],可以用一维队列,que.add(i*n+j),出队的时候x=p/n,y=p%nclass Solution { public int orangesRottin原创 2022-03-03 15:21:27 · 135 阅读 · 0 评论