Java算法leetcode
Java算法leetcode刷题笔记。
西土城fe
这个作者很懒,什么都没留下…
展开
-
Java除自身以外数组的乘积leetcode_238
技巧题原创 2022-11-27 13:20:20 · 207 阅读 · 0 评论 -
Java数组中的第K个最大元素leetcode_215
基于快排的快速选择排序.原创 2022-11-25 21:39:57 · 191 阅读 · 0 评论 -
Java课程表leetcode_207
dfs,拓扑排序原创 2022-11-22 23:57:02 · 141 阅读 · 0 评论 -
Java四数之和leetcode_18
剪枝原创 2022-11-15 20:32:43 · 131 阅读 · 0 评论 -
Java环形链表2_leetcode142
指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数。如果链表中有某个节点,可以通过连续跟踪。,返回链表开始入环的第一个节点。来表示链表尾连接到链表中的位置(,仅仅是为了标识链表的实际情况。给定一个链表的头节点。如果链表无环,则返回。,则在该链表中没有环。原创 2022-11-13 16:54:11 · 65 阅读 · 0 评论 -
Java环形链表_leetcode141(快慢指针、set)
指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数。1、解法一:设置快慢指针,只要快指针速度>慢指针速度就可以。来表示链表尾连接到链表中的位置(索引从 0 开始)。如果链表中有某个节点,可以通过连续跟踪。空间:42.3MB 击败79.54%空间:42.3MB 击败79.54%仅仅是为了标识链表的实际情况。我使用快指针速度2,慢指针速度1。(即,常量)内存解决此问题吗?时间:4ms 击败13.80%时间:0ms 击败100%,判断链表中是否有环。给你一个链表的头节点。原创 2022-11-13 16:08:55 · 330 阅读 · 0 评论 -
Java买卖股票的最佳时机 IV_leetcode188(dp+空间优化)
随后,在第 5 天 (股票价格 = 0) 的时候买入,在第 6 天 (股票价格 = 3) 的时候卖出, 这笔交易所能获得利润 = 3-0 = 3。在第 2 天 (股票价格 = 2) 的时候买入,在第 3 天 (股票价格 = 6) 的时候卖出, 这笔交易所能获得利润 = 6-2 = 4。在第 1 天 (股票价格 = 2) 的时候买入,在第 2 天 (股票价格 = 4) 的时候卖出,这笔交易所能获得利润 = 4-2 = 2。空间:39.1MB 击败94.93%时间:1ms 击败99.78%原创 2022-11-13 10:04:50 · 123 阅读 · 0 评论 -
Java颜色的分类leetcode_75
给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums ,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。内存消耗:40.1 MB, 在所有 Java 提交中击败了32.37%的用户。执行用时:0 ms, 在所有 Java 提交中击败了100.00%的用户。我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。必须在不使用库的sort函数的情况下解决这个问题。通过测试用例:87 / 87。原创 2022-09-22 18:52:14 · 131 阅读 · 0 评论 -
Java爬楼梯leetcode_70
内存消耗:38.3 MB, 在所有 Java 提交中击败了51.78%的用户。执行用时:0 ms, 在所有 Java 提交中击败了100.00%的用户。还能优化空间,用三个元素就可以,我就不优化了;你有多少种不同的方法可以爬到楼顶呢?通过测试用例:45 / 45。原创 2022-09-21 18:47:54 · 103 阅读 · 0 评论 -
Java最小路径和leetcode_64
内存消耗:43.8 MB, 在所有 Java 提交中击败了82.78%的用户。执行用时:2 ms, 在所有 Java 提交中击败了94.58%的用户。,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。给定一个包含非负整数的。每次只能向下或者向右移动一步。通过测试用例:61 / 61。原创 2022-09-21 18:29:59 · 150 阅读 · 0 评论 -
Java字母异位词分组leetcode_49
比如将 [b,a,a,a,b,c] 编码成 a3b2c1,使用编码后的字符串作为 HashMap 的 Key 进行聚合。 groupingBy 算子计算完以后,返回的是一个 Map,map 的键是。 将所有字符串根据字母排序,因为每种字母的个数都是相同的,那么排序后的字符串就一定是相同的。 编码计数,对每个字符串计数得到该字符串的计数数组,对于计数数组相同的字符串,就互为异位词。字母异位词 是由重新排列源单词的字母得到的一个新单词,所有源单词中的字母通常恰好只用一次。原创 2022-09-13 20:17:06 · 245 阅读 · 0 评论 -
Java旋转图像leetcode_48
输入:matrix = [[5,1,9,11],[2,4,8,10],[13,3,6,7],[15,14,12,16]]你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。给定一个 n × n 的二维矩阵 matrix 表示一个图像。输出:[[15,13,2,5],[14,3,4,1],[12,6,8,9],[16,7,10,11]]输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输出:[[7,4,1],[8,5,2],[9,6,3]原创 2022-09-06 21:58:42 · 136 阅读 · 0 评论 -
Java接雨水leetcode_42
内存消耗:42 MB, 在所有 Java 提交中击败了62.39%的用户。执行用时:1 ms, 在所有 Java 提交中击败了75.74%的用户。的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。通过测试用例:322 / 322。个非负整数表示每个宽度为。原创 2022-09-01 22:01:55 · 110 阅读 · 0 评论 -
Java下一个排序
整数数组的 下一个排列 是指其整数的下一个字典序更大的排列。例如,arr = [1,2,3] ,以下这些都可以视作 arr 的排列:[1,2,3]、[1,3,2]、[3,1,2]、[2,3,1]。而 arr = [3,2,1] 的下一个排列是 [1,2,3] ,因为 [3,2,1] 不存在一个字典序更大的排列。类似地,arr = [2,3,1] 的下一个排列是 [3,1,2]。例如,arr = [1,2,3] 的下一个排列是 [1,3,2]。通过测试用例:265 / 265。原创 2022-08-19 22:09:21 · 187 阅读 · 1 评论 -
Java寻找两个正序数组的中位数
给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。 算法的时间复杂度应该为 O(log (m+n)) 。1、解法一:O(m+n)执行用时:1 ms, 在所有 Java 提交中击败了100.00%的用户内存消耗:42.6 MB, 在所有 Java 提交中击败了17.27%的用户通过测试用例:2094 / 2094...原创 2022-08-07 22:03:19 · 242 阅读 · 0 评论 -
Java生成每种字符都是奇数个的字符串leetcode_1374
给你一个整数 n,请你返回一个含 n 个字符的字符串,其中每种字符在该字符串中都恰好出现 奇数次。返回的字符串必须只含小写英文字母。如果存在多个满足题目要求的字符串,则返回其中任意一个即可。内存消耗:38.6 MB, 在所有 Java 提交中击败了96.25%的用户。执行用时:0 ms, 在所有 Java 提交中击败了100.00%的用户。通过测试用例:103 / 103。...原创 2022-08-03 20:51:00 · 162 阅读 · 0 评论 -
Java二叉搜索树的最近公共祖先
百度百科中最近公共祖先的定义为“对于有根树T的两个结点p、q,最近公共祖先表示为一个结点x,满足x是p、q的祖先且x的深度尽可能大(一个节点也可以是它自己的祖先)。给定一个二叉搜索树,找到该树中两个指定节点的最近公共祖先。内存消耗42.8MB,在所有Java提交中击败了6.17%的用户。执行用时5ms,在所有Java提交中击败了99.98%的用户。通过测试用例28/28。...原创 2022-07-31 20:30:28 · 130 阅读 · 0 评论 -
Java搜索旋转数组
给定一个排序后的数组,包含n个整数,但这个数组已被旋转过很多次了,次数不详。请编写代码找出数组中的某个元素,假设数组元素原先是按升序排列的。若有多个相同元素,返回索引值最小的一个。内存消耗42.1MB,在所有Java提交中击败了78.23%的用户。执行用时0ms,在所有Java提交中击败了100.00%的用户。通过测试用例32/32。...原创 2022-07-31 20:10:28 · 163 阅读 · 0 评论 -
Java 买卖股票的最佳时机含手续费leetcode_714
给定一个整数数组prices,其中prices[i]表示第i天的股票价格;整数fee代表了交易股票的手续费用。你可以无限次地完成交易,但是你每笔交易都需要付手续费。如果你已经购买了一个股票,在卖出它之前你就不能再继续购买股票了。注意这里的一笔交易指买入持有并卖出股票的整个过程,每笔交易你只需要为支付一次手续费。内存消耗48.7MB,在所有Java提交中击败了84.19%的用户。执行用时18ms,在所有Java提交中击败了50.79%的用户。通过测试用例44/44。...原创 2022-07-30 16:15:32 · 251 阅读 · 0 评论 -
Java 最佳买卖股票时机含冷冻期leetcode_309
注意你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。卖出股票后,你无法在第二天买入股票(即冷冻期为1天)。内存消耗39.9MB,在所有Java提交中击败了17.85%的用户。内存消耗39.4MB,在所有Java提交中击败了83.95%的用户。执行用时0ms,在所有Java提交中击败了100.00%的用户。执行用时1ms,在所有Java提交中击败了77.60%的用户。通过测试用例210/210。2、动态规划空间优化。......原创 2022-07-30 15:59:58 · 124 阅读 · 0 评论 -
Java买卖股票的最佳时机 II lletcode_122
在每一天,你可以决定是否购买和/或出售股票。你也可以先购买,然后在同一天出售。给你一个整数数组prices,其中prices[i]表示某支股票第i天的价格。内存消耗41.5MB,在所有Java提交中击败了33.81%的用户。内存消耗41.5MB,在所有Java提交中击败了26.97%的用户。执行用时3ms,在所有Java提交中击败了25.66%的用户。执行用时1ms,在所有Java提交中击败了81.55%的用户。2、动态规划空间优化。...原创 2022-07-30 15:32:18 · 162 阅读 · 0 评论 -
Java买卖股票的最佳时机leetcode_121
你只能选择某一天买入这只股票,并选择在未来的某一个不同的日子卖出该股票。给定一个数组prices,它的第i个元素prices[i]表示一支给定股票第i天的价格。内存消耗53.8MB,在所有Java提交中击败了87.42%的用户。内存消耗57.4MB,在所有Java提交中击败了61.66%的用户。执行用时26ms,在所有Java提交中击败了6.74%的用户。执行用时3ms,在所有Java提交中击败了32.86%的用户。2、动态规划并压缩空间。...原创 2022-07-30 15:21:25 · 169 阅读 · 0 评论 -
Java分割等和子集
内存消耗42.5MB,在所有Java提交中击败了23.20%的用户。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。执行用时29ms,在所有Java提交中击败了33.73%的用户。通过测试用例117/117。...原创 2022-07-27 21:53:11 · 315 阅读 · 0 评论 -
Java下降路径最小和
下降路径可以从第一行中的任何元素开始,并从每一行中选择一个元素。在下一行选择的元素和当前行所选元素最多相隔一列(即位于正下方或者沿对角线向左或者向右的第一个元素)。具体来说,位置(row,col)的下一个元素应当是(row+1,col-1)、(row+1,col)或者(row+1,col+1)。给你一个nxn的方形整数数组matrix,请你找出并返回通过matrix的下降路径的最小和。通过测试用例49/49。...原创 2022-07-26 20:36:55 · 102 阅读 · 0 评论 -
Java飞地的数量leetcode_1020
给你一个大小为mxn的二进制矩阵grid,其中0表示一个海洋单元格、1表示一个陆地单元格。一次移动是指从一个陆地单元格走到另一个相邻(上、下、左、右)的陆地单元格或跨过grid的边界。返回网格中无法在任意次数的移动中离开网格边界的陆地单元格的数量。内存消耗49.2MB,在所有Java提交中击败了47.33%的用户。执行用时3ms,在所有Java提交中击败了98.63%的用户。通过测试用例57/57。...原创 2022-07-25 20:30:25 · 84 阅读 · 0 评论 -
Java二叉搜索子树的最大键值和
给你一棵以root为根的二叉树,请你返回任意二叉搜索子树的最大键值和。内存消耗52.8MB,在所有Java提交中击败了41.77%的用户。执行用时6ms,在所有Java提交中击败了97.62%的用户。任意节点的左子树中的键值都小于此节点的键值。任意节点的右子树中的键值都大于此节点的键值。任意节点的左子树和右子树都是二叉搜索树。通过测试用例58/58。...原创 2022-07-24 20:26:15 · 58 阅读 · 0 评论 -
Java二叉树的序列化与反序列化leetcode_297
这里不限定你的序列/反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。提示输入输出格式与LeetCode目前使用的方式一致,详情请参阅LeetCode序列化二叉树的格式。执行用时13ms,在所有Java提交中击败了68.09%的用户。...原创 2022-07-22 22:09:21 · 55 阅读 · 0 评论 -
Java O(1) 时间插入、删除和获取随机元素
intgetRandom()随机返回现有集合中的一项(测试用例保证调用此方法时集合中至少存在一个元素)。每个元素应该有相同的概率被返回。boolinsert(intval)当元素val不存在时,向集合中插入该项,并返回true;boolremove(intval)当元素val存在时,从集合中移除该项,并返回true;你必须实现类的所有函数,并满足每个函数的平均时间复杂度为O(1)。执行用时22ms,在所有Java提交中击败了61.97%的用户。...原创 2022-07-20 20:32:09 · 204 阅读 · 0 评论 -
Java LFU
当缓存达到其容量capacity时,则应该在插入新项之前,移除最不经常使用的项。在此问题中,当存在平局(即两个或更多个键具有相同使用频率)时,应该去除最近最久未使用的键。当一个键首次插入到缓存中时,它的使用计数器被设置为1(由于put操作)。对缓存中的键执行get或put操作,使用计数器的值将会递增。intget(intkey)-如果键key存在于缓存中,则获取键的值,否则返回-1。为了确定最不常使用的键,可以为缓存中的每个键维护一个使用计数器。...原创 2022-07-20 19:54:27 · 153 阅读 · 0 评论 -
Java LRU 缓存leetcode_146
voidput(intkey,intvalue)如果关键字key已经存在,则变更其数据值value;如果插入操作导致关键字数量超过capacity,则应该逐出最久未使用的关键字。intget(intkey)如果关键字key存在于缓存中,则返回关键字的值,否则返回-1。内存消耗120.6MB,在所有Java提交中击败了6.31%的用户。执行用时55ms,在所有Java提交中击败了19.69%的用户。通过测试用例22/22。...原创 2022-07-18 21:07:25 · 103 阅读 · 0 评论 -
Java平衡括号字符串的最少插入次数leetcode_1541
比方说"())","())(())))"和"(())())))"都是平衡的,")()","()))"和"(()))"都是不平衡的。给你一个括号字符串s,它只包含字符'('和')'。左括号'('必须在对应的连续两个右括号'))'之前。你可以在任意位置插入字符'('和')'使字符串平衡。任何左括号'('必须对应两个连续的右括号'))'。执行用时8ms,在所有Java提交中击败了98.31%的用户。通过测试用例102/102。...原创 2022-07-18 19:06:25 · 370 阅读 · 0 评论 -
Java使括号有效的最少添加 leetcode_921
例如,如果s="()))",你可以插入一个开始括号为"(()))"或结束括号为"())))"。它可以被写成AB(A与B连接),其中A和B都是有效字符串,或者。给定一个括号字符串s,移动N次,你就可以在字符串的任何位置插入一个括号。内存消耗39.5MB,在所有Java提交中击败了40.84%的用户。执行用时0ms,在所有Java提交中击败了100.00%的用户。它可以被写作(A),其中A是有效字符串。它是一个空字符串,或者。...原创 2022-07-18 19:01:25 · 212 阅读 · 0 评论 -
Java反转链表 II leetcode_92
给你单链表的头指针head和两个整数left和right,其中left原创 2022-07-17 13:27:13 · 184 阅读 · 0 评论 -
Java优势洗牌leetcode_870
给定两个大小相等的数组nums1和nums2,nums1相对于nums的优势可以用满足nums1[i]>nums2[i]的索引i的数目来描述。返回nums1的任意排列,使其相对于nums2的优势最大化。执行用时73ms,在所有Java提交中击败了27.67%的用户。内存消耗58MB,在所有Java提交中击败了88.17%的用户。通过测试用例67/67。...原创 2022-07-16 21:31:34 · 195 阅读 · 0 评论 -
Java最小覆盖子串
内存消耗41.9MB,在所有Java提交中击败了47.81%的用户。执行用时10ms,在所有Java提交中击败了65.58%的用户。所有字符的子串,则返回空字符串。通过测试用例266/266。所有字符的最小子串。原创 2022-07-14 21:33:26 · 413 阅读 · 0 评论 -
Java最长回文串leetcode
给定一个包含大写字母和小写字母的字符串 s ,返回 通过这些字母构造成的 最长的回文串 。在构造过程中,请注意 区分大小写 。比如 "Aa" 不能当做一个回文字符串。执行用时:5 ms, 在所有 Java 提交中击败了37.04%的用户内存消耗:41.4 MB, 在所有 Java 提交中击败了5.03%的用户通过测试用例:95 / 95...原创 2022-06-26 21:09:35 · 282 阅读 · 0 评论 -
Java最长公共前缀leetcode
编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 。执行用时:1 ms, 在所有 Java 提交中击败了69.33%的用户内存消耗:39.6 MB, 在所有 Java 提交中击败了27.26%的用户通过测试用例:124 / 124...原创 2022-06-26 20:27:24 · 62 阅读 · 0 评论 -
Java拼车leetcode_1094
车上最初有 capacity 个空座位。车 只能 向一个方向行驶(也就是说,不允许掉头或改变方向) 给定整数 capacity 和一个数组 trips , trip[i] = [numPassengersi, fromi, toi] 表示第 i 次旅行有 numPassengersi 乘客,接他们和放他们的位置分别是 fromi 和 toi 。这些位置是从汽车的初始位置向东的公里数。 当且仅当你可以在所有给定的行程中接送所有乘客时,返回 true,否则请返回 false。原创 2022-06-23 23:28:15 · 144 阅读 · 0 评论 -
Java航班预订统计leetcode_1109
这里有 n 个航班,它们分别从 1 到 n 进行编号。 有一份航班预订表 bookings ,表中第 i 条预订记录 bookings[i] = [firsti, lasti, seatsi] 意味着在从 firsti 到 lasti (包含 firsti 和 lasti )的 每个航班 上预订了 seatsi 个座位。 请你返回一个长度为 n 的数组 answer,里面的元素是每个航班预定的座位总数。执行用时:5 ms, 在所有 Java 提交中击败了42.00%的用户内原创 2022-06-23 23:17:27 · 239 阅读 · 1 评论 -
Java和为K的子数组leetcode_580
给你一个整数数组 和一个整数 ,请你统计并返回 该数组中和为 的子数组的个数 。1、使用前缀和执行用时:1850 ms, 在所有 Java 提交中击败了4.99%的用户内存消耗:43.5 MB, 在所有 Java 提交中击败了84.69%的用户通过测试用例:92 / 922、使用前缀和加HashMap执行用时:22 ms, 在所有 Java 提交中击败了68.62%的用户内存消耗:45.9 MB, 在所有 Java 提交中击败了6.05%的用户通过测试用例:92 / 92...原创 2022-06-22 22:35:19 · 157 阅读 · 0 评论