
学习记录
主要是做过的比较有意思的力扣题记录
奥利安费allin
这个作者很懒,什么都没留下…
展开
-
393. UTF-8 编码验证
题目给定一个表示数据的整数数组 data ,返回它是否为有效的 UTF-8 编码。UTF-8 中的一个字符可能的长度为 1 到 4 字节,遵循以下的规则:对于 1 字节 的字符,字节的第一位设为 0 ,后面 7 位为这个符号的 unicode 码。对于 n 字节 的字符 (n > 1),第一个字节的前 n 位都设为1,第 n+1 位设为 0 ,后面字节的前两位一律设为 10 。剩下的没有提及的二进制位,全部为这个符号的 unicode 码。题解class Solution { p原创 2022-03-13 12:52:37 · 435 阅读 · 0 评论 -
390. 消除游戏
题目列表 arr 由在范围 [1, n] 中的所有整数组成,并按严格递增排序。请你对 arr 应用下述算法:从左到右,删除第一个数字,然后每隔一个数字删除一个,直到到达列表末尾。重复上面的步骤,但这次是从右到左。也就是,删除最右侧的数字,然后剩下的数字每隔一个删除一个。不断重复这两步,从左到右和从右到左交替进行,直到只剩下一个数字。给你整数 n ,返回 arr 最后剩下的数字。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/eliminat原创 2022-01-02 13:14:46 · 3240 阅读 · 0 评论 -
179. 最大数
题目给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。注意:输出结果可能非常大,所以你需要返回一个字符串而不是整数。代码class Solution { public String largestNumber(int[] nums) { int n = nums.length; String[] s = new String[n]; for (int i = 0; i < n; i++) {原创 2021-12-31 16:07:35 · 153 阅读 · 0 评论 -
128. 最长连续序列
题目给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。请你设计并实现时间复杂度为 O(n) 的算法解决此问题。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/longest-consecutive-sequence著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。代码class Solution { public int longestConsecutive(int原创 2021-12-31 15:02:12 · 264 阅读 · 0 评论 -
93. 复原 IP 地址
题目有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 ‘.’ 分隔。例如:“0.1.2.201” 和 “192.168.1.1” 是 有效 IP 地址,但是 “0.011.255.245”、“192.168.1.312” 和 “192.168@1.1” 是 无效 IP 地址。给定一个只包含数字的字符串 s ,用以表示一个 IP 地址,返回所有可能的有效 IP 地址,这些地址可以通过在 s 中插入 ‘.’ 来形成。你不能重新排序或删除 s 中的任原创 2021-12-28 13:30:17 · 908 阅读 · 0 评论 -
31. 下一个排列
题目实现获取 下一个排列 的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列(即,组合出下一个更大的整数)。如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。必须 原地 修改,只允许使用额外常数空间。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/next-permutation著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。代码class Solution { public原创 2021-12-27 19:39:14 · 233 阅读 · 0 评论 -
148. 排序链表
题目给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。进阶:你可以在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序吗?来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/sort-list著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。代码public class Solution { public ListNode sortList(ListNode head)原创 2021-12-26 23:51:48 · 385 阅读 · 0 评论 -
1705. 吃苹果的最大数目
题目有一棵特殊的苹果树,一连 n 天,每天都可以长出若干个苹果。在第 i 天,树上会长出 apples[i] 个苹果,这些苹果将会在 days[i] 天后(也就是说,第 i + days[i] 天时)腐烂,变得无法食用。也可能有那么几天,树上不会长出新的苹果,此时用 apples[i] == 0 且 days[i] == 0 表示。你打算每天 最多 吃一个苹果来保证营养均衡。注意,你可以在这 n 天之后继续吃苹果。给你两个长度为 n 的整数数组 days 和 apples ,返回你可以吃掉的苹果的最大原创 2021-12-24 14:07:04 · 348 阅读 · 0 评论 -
33. 搜索旋转排序数组
题目整数数组 nums 按升序排列,数组中的值 互不相同 。在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k+1], …, nums[n-1], nums[0], nums[1], …, nums[k-1]](下标 从 0 开始 计数)。例如, [0,1,2,4,5,6,7] 在下标 3 处经旋转后可能变为 [4,5,6,7,0,1,2] 。给你 旋转后 的数组 nums 和一个整数原创 2021-12-23 15:06:20 · 673 阅读 · 0 评论 -
855. 考场就座
题目在考场里,一排有 N 个座位,分别编号为 0, 1, 2, …, N-1 。当学生进入考场后,他必须坐在能够使他与离他最近的人之间的距离达到最大化的座位上。如果有多个这样的座位,他会坐在编号最小的座位上。(另外,如果考场里没有人,那么学生就坐在 0 号座位上。)返回 ExamRoom(int N) 类,它有两个公开的函数:其中,函数 ExamRoom.seat() 会返回一个 int (整型数据),代表学生坐的位置;函数 ExamRoom.leave(int p) 代表坐在座位 p 上的学生现在离原创 2021-12-21 20:10:07 · 177 阅读 · 0 评论 -
391. 完美矩形
题目给你一个数组 rectangles ,其中 rectangles[i] = [xi, yi, ai, bi] 表示一个坐标轴平行的矩形。这个矩形的左下顶点是 (xi, yi) ,右上顶点是 (ai, bi) 。如果所有矩形一起精确覆盖了某个矩形区域,则返回 true ;否则,返回 false 。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/perfect-rectangle著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处原创 2021-12-21 19:12:11 · 4017 阅读 · 0 评论 -
42. 接雨水
题目给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。代码class Solution { public int trap(int[] height) { int left =0 ,right =height.length-1; int l_max=0,r_max=0;//记录目前最高 int res =0; while (left<right){原创 2021-12-20 20:28:29 · 85 阅读 · 0 评论 -
224. 基本计算器
题目给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。代码class Solution { public int calculate(String s) { List<Character> list = new ArrayList<>(); for (int i = 0; i < s.length(); i++) { list.add(s.charAt(i)); }原创 2021-12-20 20:05:04 · 101 阅读 · 0 评论 -
969. 煎饼排序
题目给你一个整数数组 arr ,请使用 煎饼翻转 完成对数组的排序。一次煎饼翻转的执行过程如下:选择一个整数 k ,1 <= k <= arr.length反转子数组 arr[0…k-1](下标从 0 开始)例如,arr = [3,2,1,4] ,选择 k = 3 进行一次煎饼翻转,反转子数组 [3,2,1] ,得到 arr = [1,2,3,4] 。以数组形式返回能使 arr 有序的煎饼翻转操作所对应的 k 值序列。任何将数组排序且翻转次数在 10 * arr.length 范围内原创 2021-12-19 19:55:27 · 146 阅读 · 0 评论 -
659. 分割数组为连续子序列
题目给你一个按升序排序的整数数组 num(可能包含重复数字),请你将它们分割成一个或多个长度至少为 3 的子序列,其中每个子序列都由连续整数组成。如果可以完成上述分割,则返回 true ;否则,返回 false 。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/split-array-into-consecutive-subsequences著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。代码class Solutio原创 2021-12-19 19:31:17 · 3363 阅读 · 0 评论 -
743. 网络延迟时间
题目有 n 个网络节点,标记为 1 到 n。给你一个列表 times,表示信号经过 有向 边的传递时间。 times[i] = (ui, vi, wi),其中 ui 是源节点,vi 是目标节点, wi 是一个信号从源节点传递到目标节点的时间。现在,从某个节点 K 发出一个信号。需要多久才能使所有节点都收到信号?如果不能使所有节点收到信号,返回 -1 。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/network-delay-time著作权归原创 2021-12-18 15:46:49 · 414 阅读 · 0 评论 -
1584. 连接所有点的最小费用
题目给你一个points 数组,表示 2D 平面上的一些点,其中 points[i] = [xi, yi] 。连接点 [xi, yi] 和点 [xj, yj] 的费用为它们之间的 曼哈顿距离 :|xi - xj| + |yi - yj| ,其中 |val| 表示 val 的绝对值。请你返回将所有点连接的最小总费用。只有任意两点之间 有且仅有 一条简单路径时,才认为所有点都已连接。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/min-cost-原创 2021-12-17 19:59:38 · 115 阅读 · 0 评论 -
990. 等式方程的可满足性
题目给定一个由表示变量之间关系的字符串方程组成的数组,每个字符串方程 equations[i] 的长度为 4,并采用两种不同的形式之一:“a==b” 或 “a!=b”。在这里,a 和 b 是小写字母(不一定不同),表示单字母变量名。只有当可以将整数分配给变量名,以便满足所有给定的方程时才返回 true,否则返回 false。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/satisfiability-of-equality-equations著原创 2021-12-17 18:02:00 · 79 阅读 · 0 评论 -
886. 可能的二分法
题目给定一组 N 人(编号为 1, 2, …, N), 我们想把每个人分进任意大小的两组。每个人都可能不喜欢其他人,那么他们不应该属于同一组。形式上,如果 dislikes[i] = [a, b],表示不允许将编号为 a 和 b 的人归入同一组。当可以用这种方法将所有人分进两组时,返回 true;否则返回 false。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/possible-bipartition著作权归领扣网络所有。商业转载请联系原创 2021-12-17 16:47:42 · 167 阅读 · 0 评论 -
18. 四数之和
题目给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] (若两个四元组元素一一对应,则认为两个四元组重复):0 <= a, b, c, d < na、b、c 和 d 互不相同nums[a] + nums[b] + nums[c] + nums[d] == target你可以按 任意顺序 返回答案 。来源:力扣(LeetCode)链接:ht原创 2021-12-16 19:26:43 · 83 阅读 · 0 评论 -
200. 岛屿数量
题目给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/number-of-islands著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。代码class Solution { public int numIs原创 2021-12-16 15:46:46 · 68 阅读 · 0 评论 -
56. 合并区间
题目以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/merge-intervals著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。代码class Solution { public int[][] me原创 2021-12-15 15:48:21 · 88 阅读 · 0 评论 -
241. 为运算表达式设计优先级
题目给定一个含有数字和运算符的字符串,为表达式添加括号,改变其运算优先级以求出不同的结果。你需要给出所有可能的组合的结果。有效的运算符号包含 +, - 以及 * 。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/different-ways-to-add-parentheses著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。代码class Solution { HashMap<String,List<I原创 2021-12-15 14:33:50 · 1664 阅读 · 0 评论 -
851. 喧闹和富有
题目有一组 n 个人作为实验对象,从 0 到 n - 1 编号,其中每个人都有不同数目的钱,以及不同程度的安静值(quietness)。为了方便起见,我们将编号为 x 的人简称为 "person x "。给你一个数组 richer ,其中 richer[i] = [ai, bi] 表示 person ai 比 person bi 更有钱。另给你一个整数数组 quiet ,其中 quiet[i] 是 person i 的安静值。richer 中所给出的数据 逻辑自恰(也就是说,在 person x 比 p原创 2021-12-15 14:04:51 · 97 阅读 · 0 评论 -
398. 随机数索引
题目给定一个可能含有重复元素的整数数组,要求随机输出给定的数字的索引。 您可以假设给定的数字一定存在于数组中。注意:数组大小可能非常大。 使用太多额外空间的解决方案将不会通过测试。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/random-pick-index著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。代码class Solution { int[] res; int[] nums; p原创 2021-12-14 19:40:39 · 118 阅读 · 0 评论 -
372. 超级次方
题目你的任务是计算 ab 对 1337 取模,a 是一个正整数,b 是一个非常大的正整数且会以数组形式给出。代码class Solution { int base=1337; int myPow(int a,int k){//a^k if (k==0) return 1; a %=base; if (k%2==1) return a*myPow(a,k-1)%base;//若k是奇数 else {// k 是偶数原创 2021-12-14 17:08:56 · 82 阅读 · 0 评论 -
793. 阶乘函数后 K 个零
题目f(x) 是 x! 末尾是 0 的数量。(回想一下 x! = 1 * 2 * 3 * … * x,且 0! = 1 )例如, f(3) = 0 ,因为 3! = 6 的末尾没有 0 ;而 f(11) = 2 ,因为 11!= 39916800 末端有 2 个 0 。给定 K,找出多少个非负整数 x ,能满足 f(x) = K 。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/preimage-size-of-factorial-zeroes-原创 2021-12-14 16:27:59 · 106 阅读 · 0 评论 -
773. 滑动谜题
题目在一个 2 x 3 的板上(board)有 5 块砖瓦,用数字 1~5 来表示, 以及一块空缺用 0 来表示.一次移动定义为选择 0 与一个相邻的数字(上下左右)进行交换.最终当板 board 的结果是 [[1,2,3],[4,5,0]] 谜板被解开。给出一个谜板的初始状态,返回最少可以通过多少次移动解开谜板,如果不能解开谜板,则返回 -1 。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/sliding-puzzle著作权归领扣网络所原创 2021-12-14 13:43:09 · 276 阅读 · 0 评论 -
752. 打开转盘锁
题目你有一个带有四个圆形拨轮的转盘锁。每个拨轮都有10个数字: ‘0’, ‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’, ‘7’, ‘8’, ‘9’ 。每个拨轮可以自由旋转:例如把 ‘9’ 变为 ‘0’,‘0’ 变为 ‘9’ 。每次旋转都只能旋转一个拨轮的一位数字。锁的初始数字为 ‘0000’ ,一个代表四个拨轮的数字的字符串。列表 deadends 包含了一组死亡数字,一旦拨轮的数字和列表里的任何一个元素相同,这个锁将会被永久锁定,无法再被旋转。字符串 target 代表可以解锁的数字原创 2021-12-13 21:37:53 · 113 阅读 · 0 评论 -
77. 组合
题目给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。你可以按 任何顺序 返回答案。代码class Solution { List<List<Integer>> res; public List<List<Integer>> combine(int n, int k) { res =new ArrayList<>(); ArrayList<Integer&原创 2021-12-13 19:02:17 · 80 阅读 · 0 评论 -
134. 加油站
题目在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 gas[i] 升。你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。如果你可以绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1。说明:如果题目有解,该答案即为唯一答案。输入数组均为非空数组,且长度相同。输入数组中的元素均为非负数。来源:力扣(LeetCode)链接:https://leetcode-cn.com/proble原创 2021-12-12 19:42:21 · 79 阅读 · 0 评论 -
45. 跳跃游戏 II
题目给你一个非负整数数组 nums ,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。你的目标是使用最少的跳跃次数到达数组的最后一个位置。假设你总是可以到达数组的最后一个位置。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/jump-game-ii著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。代码class Solution { public int jump(int[] n原创 2021-12-12 19:13:14 · 74 阅读 · 0 评论 -
1024. 视频拼接
题目你将会获得一系列视频片段,这些片段来自于一项持续时长为 time 秒的体育赛事。这些片段可能有所重叠,也可能长度不一。使用数组 clips 描述所有的视频片段,其中 clips[i] = [starti, endi] 表示:某个视频片段开始于 starti 并于 endi 结束。甚至可以对这些片段自由地再剪辑:例如,片段 [0, 7] 可以剪切成 [0, 1] + [1, 3] + [3, 7] 三部分。我们需要将这些片段进行再剪辑,并将剪辑后的内容拼接成覆盖整个运动过程的片段([0, tim原创 2021-12-12 18:21:54 · 4184 阅读 · 0 评论 -
188. 买卖股票的佳时机 IV
题目给定一个整数数组 prices ,它的第 i 个元素 prices[i] 是一支给定的股票在第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你最多可以完成 k 笔交易。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。代码class Solution { public int maxProfit(int k, int[] prices) { if (k>prices.length/2) return maxP原创 2021-12-11 19:58:14 · 174 阅读 · 0 评论 -
312. 戳气球
题目有 n 个气球,编号为0 到 n - 1,每个气球上都标有一个数字,这些数字存在数组 nums 中。现在要求你戳破所有的气球。戳破第 i 个气球,你可以获得 nums[i - 1] * nums[i] * nums[i + 1] 枚硬币。 这里的 i - 1 和 i + 1 代表和 i 相邻的两个气球的序号。如果 i - 1或 i + 1 超出了数组的边界,那么就当它是一个数字为 1 的气球。求所能获得硬币的最大数量。代码class Solution { public int max原创 2021-12-09 20:39:24 · 367 阅读 · 0 评论 -
887. 鸡蛋掉落
题目给你 k 枚相同的鸡蛋,并可以使用一栋从第 1 层到第 n 层共有 n 层楼的建筑。已知存在楼层 f ,满足 0 <= f <= n ,任何从 高于 f 的楼层落下的鸡蛋都会碎,从 f 楼层或比它低的楼层落下的鸡蛋都不会破。每次操作,你可以取一枚没有碎的鸡蛋并把它从任一楼层 x 扔下(满足 1 <= x <= n)。如果鸡蛋碎了,你就不能再次使用它。如果某枚鸡蛋扔下后没有摔碎,则可以在之后的操作中 重复使用 这枚鸡蛋。请你计算并返回要确定 f 确切的值 的 最小操作次数原创 2021-12-09 19:40:58 · 406 阅读 · 0 评论 -
10. 正则表达式匹配
题目给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 ‘.’ 和 ‘*’ 的正则表达式匹配。‘.’ 匹配任意单个字符‘*’ 匹配零个或多个前面的那一个元素所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。代码class Solution { HashMap<String,Boolean> memo; public boolean isMatch(String s, String p) { memo =new HashMap<&原创 2021-12-09 16:35:53 · 205 阅读 · 0 评论 -
787. K 站中转内最便宜的航班
题目有 n 个城市通过一些航班连接。给你一个数组 flights ,其中 flights[i] = [fromi, toi, pricei] ,表示该航班都从城市 fromi 开始,以价格 pricei 抵达 toi。现在给定所有的城市和航班,以及出发城市 src 和目的地 dst,你的任务是找到出一条最多经过 k 站中转的路线,使得从 src 到 dst 的 价格最便宜 ,并返回该价格。 如果不存在这样的路线,则输出 -1。代码class Solution { // 哈希表记录每个点的入原创 2021-12-09 15:39:11 · 193 阅读 · 0 评论 -
514. 自由之路
题目给定一个字符串 ring,表示刻在外环上的编码;给定另一个字符串 key,表示需要拼写的关键词。您需要算出能够拼写关键词中所有字符的最少步数。代码class Solution { public int findRotateSteps(String ring, String key) { int n = ring.length(), m = key.length(); List<Integer>[] pos = new List[26];//定义原创 2021-12-08 23:31:08 · 95 阅读 · 0 评论 -
322. 零钱兑换
题目给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额,返回 -1 。你可以认为每种硬币的数量是无限的。代码class Solution { public int coinChange(int[] coins, int amount) { int[] dp=new int[amount+1];//组大小为 amount + 1,初始值也为 am原创 2021-11-26 11:52:56 · 210 阅读 · 0 评论