自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(252)
  • 问答 (5)
  • 收藏
  • 关注

原创 虚拟机 linux Ubuntu

linux

2022-11-01 19:30:57 138 1

原创 leetcode【困难】10、正则表达式匹配

q

2022-09-27 16:32:06 169

原创 leetcode【中等】451、根据字符出现频率排序

a

2022-09-22 21:42:56 164

原创 leetcode【中等】97、交错字符串

2022-09-22 20:20:14 99

原创 leetcode【困难】460、LFU 缓存

a

2022-09-21 22:37:21 196

原创 leetcode【中等】328、奇偶链表

2022-09-21 21:11:18 141

原创 leetcode【中等】875、爱吃香蕉的珂珂

2022-08-08 16:41:37 75

原创 lua学习

lua

2022-07-31 18:22:02 422 3

原创 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 663

原创 leetcode【困难】301、删除无效的括号

给你一个由若干括号和字母组成的字符串 s ,删除最小数量的无效括号,使得输入的字符串有效。返回所有可能的结果。答案可以按 任意顺序 返回。示例 1:输入:s = "()())()"输出:["(())()","()()()"]示例 2:输入:s = "(a)())()"输出:["(a())()","(a)()()"]示例 3:输入:s = ")("输出:[""]思路1:dfs参考 22、括号生成【中等】当遍历到「左括号」的时候:「左括号」数量加 1。当遍历到「右括号」的时

2022-03-23 22:07:55 441

原创 leetcode【中等】2212、射箭比赛中的最大得分

Alice 和 Bob 是一场射箭比赛中的对手。比赛规则如下:Alice 先射 numArrows 支箭,然后 Bob 也射 numArrows 支箭。分数按下述规则计算:箭靶有若干整数计分区域,范围从 0 到 11 (含 0 和 11)。箭靶上每个区域都对应一个得分 k(范围是 0 到 11),Alice 和 Bob 分别在得分 k 区域射中 ak 和 bk 支箭。如果 ak >= bk ,那么 Alice 得 k 分。如果 ak < bk ,则 Bob 得 k 分如果 ak ==

2022-03-21 22:27:12 268

原创 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 259

原创 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 207

原创 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 470

原创 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 82

原创 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 392

原创 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 246

原创 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 465

原创 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 239

原创 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 591

原创 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 158

原创 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 141

原创 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 148

原创 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 6226

原创 leetcode【中等】781、森林中的兔子

森林中有未知数量的兔子。提问其中若干只兔子 “还有多少只兔子与你(指被提问的兔子)颜色相同?” ,将答案收集到一个整数数组 answers 中,其中 answers[i] 是第 i 只兔子的回答。给你数组 answers ,返回森林中兔子的最少数量。示例 1:输入:answers = [1,1,2]输出:5解释:两只回答了 "1" 的兔子可能有相同的颜色,设为红色。 之后回答了 "2" 的兔子不会是红色,否则他们的回答会相互矛盾。设回答了 "2" 的兔子为蓝色。 此外,森林中还应有另外 2

2022-03-13 19:11:06 622

原创 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 393

原创 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 326

原创 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 305

原创 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 217

原创 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 99

原创 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 182

原创 leetcode【中等】2055、蜡烛之间的盘子

给你一个长桌子,桌子上盘子和蜡烛排成一列。给你一个下标从 0 开始的字符串 s ,它只包含字符 ’ * ’ 和 ‘|’ ,其中 ’ * ’ 表示一个 盘子 ,’|’ 表示一支 蜡烛 。同时给你一个下标从 0 开始的二维整数数组 queries ,其中 queries[i] = [lefti, righti] 表示 子字符串 s[lefti…righti] (包含左右端点的字符)。对于每个查询,你需要找到 子字符串中 在 两支蜡烛之间 的盘子的 数目 。如果一个盘子在 子字符串中 左边和右边 都 至少有一支

2022-03-08 17:07:12 173

原创 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 163

原创 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 448

原创 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 262

原创 leetcode【困难】剑指 Offer 51、数组中的逆序对

在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。示例 1:输入: [7,5,6,4]输出: 5思路1、归并时间复杂度O(NlogN)空间复杂度 O(N) 辅助数组 tmp每当遇到 左子数组当前元素 > 右子数组当前元素 时,意味着 「左子数组当前元素 至 末尾元素」 与 「右子数组当前元素」 构成了若干 「逆序对」在归并排序中,边排序,边计算遇到逆序的个数两两合并示例:总流程:public cla

2022-03-08 12:24:26 140

原创 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 105

原创 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 260

原创 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 101

原创 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 175

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除