leetcode
childhoodEnd
前抖音程序猿
展开
-
【Leetcode 876】【Leetcode 19】【GO】链表专题
【Leetcode 876, 19】链表题型解析原创 2023-03-12 13:50:34 · 130 阅读 · 0 评论 -
【Leetcode 189】轮转数组
Leetcode 189 轮转数组解题思路原创 2023-03-12 13:16:29 · 116 阅读 · 0 评论 -
【LeetCode 704】【Go】二分查找
Leetcode 二分算法(一)原创 2023-02-25 13:01:38 · 530 阅读 · 0 评论 -
【Java】Leetcode1371 每个元音包含偶数次的字符串
题目:给你一个字符串 s ,请你返回满足以下条件的最长子字符串的长度:每个元音字母,即 ‘a’,‘e’,‘i’,‘o’,‘u’ ,在子字符串中都恰好出现了偶数次。示例 1:输入:s = “eleetminicoworoep”输出:13解释:最长子字符串是 “leetminicowor” ,它包含 e,i,o 各 2 个,以及 0 个 a,u 。思路:精髓在于,用动态数组维护一个前缀的元音数目,下面的思路是将每个元音字符的奇偶情况以二进制的状态存储通过异或操作进行动态变化你可以简化为五个动原创 2021-01-26 10:04:55 · 183 阅读 · 0 评论 -
【Java】Leetcode208 实现Trie前缀树
题目:实现一个 Trie (前缀树),包含 insert, search, 和 startsWith 这三个操作。示例:Trie trie = new Trie();trie.insert(“apple”);trie.search(“apple”); // 返回 truetrie.search(“app”); // 返回 falsetrie.startsWith(“app”); // 返回 truetrie.insert(“app”);trie.search(“app”);原创 2021-01-26 09:48:46 · 132 阅读 · 0 评论 -
【Java】Leetcode395 至少有K个重复字符的最长子串
题目:找到给定字符串(由小写字符组成)中的最长子串 T , 要求 T 中的每一字符出现次数都不少于 k 。输出 T 的长度。示例 1:输入:s = “aaabb”, k = 3输出:3最长子串为 “aaa” ,其中 ‘a’ 重复了 3 次。思路:递归分解数组,根据是否存在某个字符的字符数量小于 K存在则基于该字符分解最终返回最大值class Solution { public int longestSubstring(String s, int k) { if原创 2021-01-18 09:41:46 · 186 阅读 · 0 评论 -
【Java】Leetcode410 分割数组的最大值
题目:给定一个非负整数数组和一个整数 m,你需要将这个数组分成 m 个非空的连续子数组。设计一个算法使得这 m 个子数组各自和的最大值最小。注意:数组长度 n 满足以下条件:1 ≤ n ≤ 10001 ≤ m ≤ min(50, n)示例:输入:nums = [7,2,5,10,8]m = 2输出:18解释:一共有四种方法将nums分割为2个子数组。其中最好的方式是将其分为[7,2,5] 和 [10,8],因为此时这两个子数组各自的和的最大值为18,在所有情况中最小。思路:原创 2021-01-04 10:31:19 · 180 阅读 · 0 评论 -
【Java】Leetcode316 去除重复字母
题目:给你一个字符串 s ,请你去除字符串中重复的字母,使得每个字母只出现一次。需保证 返回结果的字典序最小(要求不能打乱其他字符的相对位置)。注意:该题与 1081 https://leetcode-cn.com/problems/smallest-subsequence-of-distinct-characters 相同示例 1:输入:s = “bcabc”输出:“abc”思路:需要保证每个字符串中出现的字母留一个下来字母相对顺序不变因为要相对顺序不变,就考虑栈,因为最后结果要从头输入原创 2021-01-02 11:09:42 · 127 阅读 · 0 评论 -
【Java】Leetcode413 等差数列划分
题目:如果一个数列至少有三个元素,并且任意两个相邻元素之差相同,则称该数列为等差数列。例如,以下数列为等差数列:1, 3, 5, 7, 97, 7, 7, 73, -1, -5, -9以下数列不是等差数列。1, 1, 2, 5, 7思路:数列是要连续的,子序列不需要逐渐递归缩短数列计算和class Solution { int sum = 0; public int numberOfArithmeticSlices(int[] A) { helper(A原创 2020-12-25 13:42:03 · 99 阅读 · 0 评论 -
【Java】Leetcode516 最长回文子序列
题目:给定一个字符串 s ,找到其中最长的回文子序列,并返回该序列的长度。可以假设 s 的最大长度为 1000 。示例 1:输入:“bbbab”输出:4思路:二维数组动态规划状态:该两节点间的最大回文字符串值,两节点是否相同动态转移方程:节点相同与不同时进行不同的处理初始:一个字符时数据为 1;public int longestPalindromeSubseq(String s) { int len = s.length(); int[][] dp原创 2020-12-25 13:39:28 · 216 阅读 · 0 评论 -
【Java】Leetcode450 删除二叉搜索树中的节点
题目:给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。一般来说,删除节点可分为两个步骤:首先找到需要删除的节点;如果找到了,删除它。说明: 要求算法时间复杂度为 O(h),h 为树的高度。示例:root = [5,3,6,2,4,null,7]key = 35/ 3 6/ \ 2 4 7给定需要删除的节点值是 3,所以我们首先找到 3 这个节原创 2020-12-22 14:02:36 · 69 阅读 · 0 评论 -
【Java】Leetcode131 分割回文串
题目:给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。返回 s 所有可能的分割方案。示例:输入: “aab”输出:[[“aa”,“b”],[“a”,“a”,“b”]]思路:判断出字符串的每种回文分割回溯加入注意,判断时,将长度从小到大一次判断,注意边界要到达class Solution { public List<List<String>> partition(String s) { List<List<原创 2020-12-21 14:26:14 · 76 阅读 · 0 评论 -
【Java】Leetcode491 递增子序列
题目:给定一个整型数组, 你的任务是找到所有该数组的递增子序列,递增子序列的长度至少是2。示例:输入: [4, 6, 7, 7]输出: [[4, 6], [4, 7], [4, 6, 7], [4, 6, 7, 7], [6, 7], [6, 7, 7], [7,7], [4,7,7]]思路:dfs 到底,回溯算法别用 list.indexOf() 方法在递归中巨慢class Solution { List<List<Integer>> res = new原创 2020-12-21 14:02:34 · 115 阅读 · 0 评论 -
【Java】Leetcode95 不同的二叉搜索树2
题目:给定一个整数 n,生成所有由 1 … n 为节点所组成的 二叉搜索树 。示例:输入:3输出:[[1,null,3,2],[3,2,null,1],[3,1,null,null,2],[2,1,3],[1,null,2,null,3]]解释:以上的输出对应以下 5 种不同结构的二叉搜索树:1 3 3 2 1\ / / / \ 3 2 1 1 3 2原创 2020-12-19 18:13:07 · 149 阅读 · 1 评论 -
【Java】Leetcode96 不同的二叉搜索树
题目:给定一个整数 n,求以 1 … n 为节点组成的二叉搜索树有多少种?示例:输入: 3输出: 5解释:给定 n = 3, 一共有 5 种不同结构的二叉搜索树:1 3 3 2 1\ / / / \ 3 2 1 1 3 2/ / \ 2 1 2 3思路:原创 2020-12-19 18:09:09 · 138 阅读 · 1 评论 -
【Java】Leetcode1367 二叉树中的列表
题目:给你一棵以 root 为根的二叉树和一个 head 为第一个节点的链表。如果在二叉树中,存在一条一直向下的路径,且每个点的数值恰好一一对应以 head 为首的链表中每个节点的值,那么请你返回 True ,否则返回 False 。一直向下的路径的意思是:从树中某个节点开始,一直连续向下的路径。思路:递归判断该二叉树点为起点是否符合与二叉树的两个子节点为起点是否符合递归结束条件为链表递归完成。class Solution { public boolean isSubPath(List原创 2020-12-18 14:13:58 · 152 阅读 · 0 评论 -
【Java】Leetcode1230
题目:有一些不规则的硬币。在这些硬币中,prob[i] 表示第 i 枚硬币正面朝上的概率。请对每一枚硬币抛掷 一次,然后返回正面朝上的硬币数等于 target 的概率。示例 1:输入:prob = [0.4], target = 1输出:0.40000思路:动态规划题类似梯子题,通过梯子可以到达任意的高的楼,题号忘了一个状态是硬币数量,另一个是当前正面朝上的数量初始化好正面朝上为 0 情况下的数据再从硬币数量 1 开始计算概率和,得到最终结果class Solution {原创 2020-11-30 15:34:15 · 214 阅读 · 0 评论 -
【Java】Leetcode1664 生成平衡数组的方案数
题目:给你一个整数数组 nums 。你需要选择 恰好 一个下标(下标从 0 开始)并删除对应的元素。请注意剩下元素的下标可能会因为删除操作而发生改变。比方说,如果 nums = [6,1,7,4,1] ,那么:选择删除下标 1 ,剩下的数组为 nums = [6,7,4,1] 。选择删除下标 2 ,剩下的数组为 nums = [6,1,4,1] 。选择删除下标 4 ,剩下的数组为 nums = [6,1,7,4] 。如果一个数组满足奇数下标元素的和与偶数下标元素的和相等,该数组就是一个 平衡数组原创 2020-11-29 16:54:28 · 223 阅读 · 0 评论 -
【Java】Leetcode935 骑士拨号器
题目:骑士按中国象棋的日字型移动这一次,我们将 “骑士” 放在电话拨号盘的任意数字键(如上图所示)上,接下来,骑士将会跳 N-1 步。每一步必须是从一个数字键跳到另一个数字键。每当它落在一个键上(包括骑士的初始位置),都会拨出键所对应的数字,总共按下 N 位数字。你能用这种方式拨出多少个不同的号码?因为答案可能很大,所以输出答案模 10^9 + 7。思路:每个位置跳到下一个位置的方位是固定的,所以只需要统计每个位置的数量即可然后加起来tips:创建销毁数组时间耗费较大,故直接创建二维数组原创 2020-11-28 15:48:39 · 81 阅读 · 0 评论 -
【Java】Leetcode1277 统计全为1的正方形子矩阵
一. 题目给你一个 m * n 的矩阵,矩阵中的元素不是 0 就是 1,请你统计并返回其中完全由 1 组成的 正方形 子矩阵的个数。示例 1:输入:matrix =[[0,1,1,1],[1,1,1,1],[0,1,1,1]]输出:15解释:边长为 1 的正方形有 10 个。边长为 2 的正方形有 4 个。边长为 3 的正方形有 1 个。正方形的总数 = 10 + 4 + 1 = 15.二. 思路因为是正方形,所以和全为1的矩形不同只需判断三个边角中的最小值即可。得到新的原创 2020-11-21 16:00:09 · 295 阅读 · 0 评论 -
【Java】Leetcode LCP03 机器人大冒险
题目:力扣团队买了一个可编程机器人,机器人初始位置在原点(0, 0)。小伙伴事先给机器人输入一串指令command,机器人就会无限循环这条指令的步骤进行移动。指令有两种:U: 向y轴正方向移动一格R: 向x轴正方向移动一格。不幸的是,在 xy 平面上还有一些障碍物,他们的坐标用obstacles表示。机器人一旦碰到障碍物就会被损毁。给定终点坐标(x, y),返回机器人能否完好地到达终点。如果能,返回true;否则返回false。示例 1:输入:command = “URR”, obstacle原创 2020-11-16 15:38:41 · 128 阅读 · 0 评论 -
【Java】Leetcode799 香槟塔
题目:我们把玻璃杯摆成金字塔的形状,其中第一层有1个玻璃杯,第二层有2个,依次类推到第100层,每个玻璃杯(250ml)将盛有香槟。从顶层的第一个玻璃杯开始倾倒一些香槟,当顶层的杯子满了,任何溢出的香槟都会立刻等流量的流向左右两侧的玻璃杯。当左右两边的杯子也满了,就会等流量的流向它们左右两边的杯子,依次类推。(当最底层的玻璃杯满了,香槟会流到地板上)例如,在倾倒一杯香槟后,最顶层的玻璃杯满了。倾倒了两杯香槟后,第二层的两个玻璃杯各自盛放一半的香槟。在倒三杯香槟后,第二层的香槟满了 - 此时总共有三个满原创 2020-11-14 15:56:04 · 128 阅读 · 0 评论 -
【Java】Leetcode790 多米诺和托米诺
题目:有两种形状的瓷砖:一种是 2x1 的多米诺形,另一种是形如 “L” 的托米诺形。两种形状都可以旋转。XX <- 多米诺XX <- “L” 托米诺X给定 N 的值,有多少种方法可以平铺 2 x N 的面板?返回值 mod 10^9 + 7。(平铺指的是每个正方形都必须有瓷砖覆盖。两个平铺不同,当且仅当面板上有四个方向上的相邻单元中的两个,使得恰好有一个平铺有一个瓷砖占据两个正方形。)示例:输入: 3输出: 5解释:下面列出了五种不同的方法,不同字母代表不同瓷砖:X原创 2020-11-14 14:58:16 · 179 阅读 · 0 评论 -
【Java】Leetcode328 奇偶链表
题目:给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1),时间复杂度应为 O(nodes),nodes 为节点总数。示例 1:输入: 1->2->3->4->5->NULL输出: 1->3->5->2->4->NULL思路:奇偶指针的下一个指向对应的值,及下一个指向下一个的下一个奇偶指针再向原创 2020-11-13 13:52:13 · 51 阅读 · 0 评论 -
【Java】Leetcode300 最长上升子序列
题目:给定一个无序的整数数组,找到其中最长上升子序列的长度。示例:输入: [10,9,2,5,3,7,101,18]输出: 4解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。思路:生成一个最长子序列动态规划数组从后往前遍历,得到一个当前最长情况下,每个节点都最小的子序列数组。遍历每个数,二分查找这个数在数组中能替换的位置。替换的条件是,长于最大值,则放在最后,否则嵌入刚好小于某个数的位置class Solution { public int lengthOf原创 2020-11-12 16:54:24 · 90 阅读 · 0 评论 -
【Java】Leetcode1648 销售价值减少的颜色球
题目:你有一些球的库存 inventory ,里面包含着不同颜色的球。一个顾客想要 任意颜色 总数为 orders 的球。这位顾客有一种特殊的方式衡量球的价值:每个球的价值是目前剩下的 同色球 的数目。比方说还剩下 6 个黄球,那么顾客买第一个黄球的时候该黄球的价值为 6 。这笔交易以后,只剩下 5 个黄球了,所以下一个黄球的价值为 5 (也就是球的价值随着顾客购买同色球是递减的)给你整数数组 inventory ,其中 inventory[i] 表示第 i 种颜色球一开始的数目。同时给你整数 ord原创 2020-11-12 16:40:09 · 280 阅读 · 1 评论 -
【Java】Leetcode1642 可以到达的最远建筑
题目:给你一个整数数组 heights ,表示建筑物的高度。另有一些砖块 bricks 和梯子 ladders 。你从建筑物 0 开始旅程,不断向后面的建筑物移动,期间可能会用到砖块或梯子。当从建筑物 i 移动到建筑物 i+1(下标 从 0 开始 )时:如果当前建筑物的高度 大于或等于 下一建筑物的高度,则不需要梯子或砖块如果当前建筑的高度 小于 下一个建筑的高度,您可以使用 一架梯子 或 (h[i+1] - h[i]) 个砖块如果以最佳方式使用给定的梯子和砖块,返回你可以到达的最远建筑物的下标原创 2020-11-05 16:29:54 · 258 阅读 · 0 评论 -
【Java】Leetcode646 最长对数链
题目:最长数对链给出 n 个数对。 在每一个数对中,第一个数字总是比第二个数字小。现在,我们定义一种跟随关系,当且仅当 b < c 时,数对(c, d) 才可以跟在 (a, b) 后面。我们用这种形式来构造一个数对链。给定一个对数集合,找出能够形成的最长数对链的长度。你不需要用到所有的数对,你可以以任何顺序选择其中的一些数对来构造。示例 :输入: [[1,2], [2,3], [3,4]]输出: 2解释: 最长的数对链是 [1,2] -> [3,4]思路:最长上升数组的改原创 2020-10-24 08:58:32 · 81 阅读 · 0 评论 -
【Java】Leetcode1626 无矛盾的最佳球队
题目:无矛盾的最佳球队假设你是球队的经理。对于即将到来的锦标赛,你想组合一支总体得分最高的球队。球队的得分是球队中所有球员的分数 总和 。然而,球队中的矛盾会限制球员的发挥,所以必须选出一支 没有矛盾 的球队。如果一名年龄较小球员的分数 严格大于 一名年龄较大的球员,则存在矛盾。同龄球员之间不会发生矛盾。给你两个列表 scores 和 ages,其中每组 scores[i] 和 ages[i] 表示第 i 名球员的分数和年龄。请你返回 所有可能的无矛盾球队中得分最高那支的分数 。示例 1:输原创 2020-10-23 10:37:34 · 208 阅读 · 0 评论 -
【Java】Leetcode1027最长等差子序列
题目:给定一个整数数组 A,返回 A 中最长等差子序列的长度。回想一下,A 的子序列是列表 A[i_1], A[i_2], …, A[i_k] 其中 0 <= i_1 < i_2 < … < i_k <= A.length - 1。并且如果 B[i+1] - B[i]( 0 <= i < B.length - 1) 的值都相同,那么序列 B 是等差的。示例 1:输入:[3,6,9,12]输出:4解释:整个数组是公差为 3 的等差数列。思路:二维动态原创 2020-10-20 09:54:04 · 427 阅读 · 0 评论 -
【Java】Leetcode1105 填充书架
题目:你把要摆放的书 books 都整理好,叠成一摞:从上往下,第 i 本书的厚度为 books[i][0],高度为 books[i][1]。按顺序 将这些书摆放到总宽度为 shelf_width 的书架上。先选几本书放在书架上(它们的厚度之和小于等于书架的宽度 shelf_width),然后再建一层书架。重复这个过程,直到把所有的书都放在书架上。需要注意的是,在上述过程的每个步骤中,摆放书的顺序与你整理好的顺序相同。 例如,如果这里有 5 本书,那么可能的一种摆放情况是:第一和第二本书放在第一层书原创 2020-09-26 15:59:29 · 391 阅读 · 0 评论 -
【Java】Leetcode787 K站内中转最便宜
题目:K 站中转内最便宜的航班有 n 个城市通过 m 个航班连接。每个航班都从城市 u 开始,以价格 w 抵达 v。现在给定所有的城市和航班,以及出发城市 src 和目的地 dst,你的任务是找到从 src 到 dst 最多经过 k 站中转的最便宜的价格。 如果没有这样的路线,则输出 -1。思路:本题其实有个隐藏设定,即目的地 dst 是数字最大的城市,或相对大的城市将距离花费存到一个二维数组中依次将出发地之后可达的路径加入优先队列 PriorityQueue 中判断是否超过 K 站中转,是则原创 2020-09-26 15:19:27 · 204 阅读 · 0 评论 -
【Java】Leetcode287 寻找重复数
题目:给定一个包含 n + 1 个整数的数组 nums,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数。示例 1:输入: [1,3,4,2,2]输出: 2思路:题目不难,难在限制条件通过求环的方法来找到这个重复的数。方法使用查找环的第一个节点代码:class Solution { public int findDuplicate(int[] nums) { if(nums.length==0)原创 2020-08-04 20:49:26 · 133 阅读 · 0 评论 -
【Java】leetcode347 前 K 个高频数字
题目:给定一个非空的整数数组,返回其中出现频率前 k 高的元素。示例 1:输入: nums = [1,1,1,2,2,3], k = 2输出: [1,2]思路:主要是记录一下这个生成最小堆的队列 PriorityQueue通过最小堆队列实现取最大值代码:class Solution { public int[] topKFrequent(int[] nums, int k) { int[] res = new int[k]; if(nums.leng原创 2020-08-04 09:57:50 · 117 阅读 · 0 评论 -
Leetcode179 非负整数组合最大值 Java
题目:给定一组非负整数,重新排列它们的顺序使之组成一个最大的整数。示例 1:输入: [10,2]输出: 210思路:转化成字符串,组合起来比较大小,重载 sort 方法比较谁先谁后最后判断是否是都是 0 的情况,特例代码:class Solution { public String largestNumber(int[] nums) { String[] strings = new String[nums.length]; for (int i =原创 2020-08-04 09:54:15 · 630 阅读 · 0 评论 -
leetcod968 二叉树监视器 java
题目:给定一个二叉树,我们在树的节点上安装摄像头。节点上的每个摄影头都可以监视其父对象、自身及其直接子对象。计算监控树的所有节点所需的最小摄像头数量。思路:从叶子节点向上判断状态有三种,叶子节点判 0,空节点和叶子的父父节点为状态 2叶子节点的父节点为状态 1贪心最优解是首先给所有的状态 1 嵌入监视器两个状态 2 能生成一个状态 0一个状态 0 就能生成一个状态 1剩下都是 2代码:/** * Definition for a binary tree node. * publ原创 2020-08-03 16:08:13 · 123 阅读 · 0 评论 -
Leetcode464 累计整数和 Java
题目:在 “100 game” 这个游戏中,两名玩家轮流选择从 1 到 10 的任意整数,累计整数和,先使得累计整数和达到 100 的玩家,即为胜者。如果我们将游戏规则改为 “玩家不能重复使用整数” 呢?例如,两个玩家可以轮流从公共整数池中抽取从 1 到 15 的整数(不放回),直到累计整数和 >= 100。给定一个整数 maxChoosableInteger (整数池中可选择的最大数)和另一个整数 desiredTotal(累计和),判断先出手的玩家是否能稳赢(假设两位玩家游戏时都表现最佳)原创 2020-08-02 08:26:48 · 277 阅读 · 0 评论 -
Leetcode424 替换最长子串 Java
题目:给你一个仅由大写英文字母组成的字符串,你可以将任意位置上的字符替换成另外的字符,总共可最多替换 k 次。在执行上述操作后,找到包含重复字母的最长子串的长度。注意:字符串长度 和 k 不会超过 104。示例 1:输入:s = “ABAB”, k = 2输出:4解释:用两个’A’替换为两个’B’,反之亦然。思路:滑动窗口法维持左右指针设置一个数组记录窗口内各字母数量右指针不断增加窗口取右指针指向的字母数量加能修改的数量和原值的最大值左指针离开窗口后,修改数组内字母数量与指原创 2020-08-01 08:25:49 · 169 阅读 · 0 评论 -
算法框架小结
一. 动态规划思路:明确 状态:找出原问题和子问题中变化的值是哪个定义 dp 数组 / 函数 的含义:明确 dp 数组最后要求的值明确 选择并择优:明确前后状态的变化明确基本状态:就是要初始化的数组值例子:凑零钱问题最少的硬币数价格 n 时的硬币数在之前相隔硬币价值的 dp 元素中取最小值 加一刚好求到价格 n 为 0 时返回 0,n 小于 0 时返回 -1 , 并一直返回 -1二. 回溯算法思路:路径:已经做出的选择选择列表:可以做出的选择结束条件:到达决策树底层,原创 2020-07-30 14:21:19 · 584 阅读 · 1 评论 -
Leetcode45 跳跃游戏2
题目:给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。你的目标是使用最少的跳跃次数到达数组的最后一个位置。思路:贪心算法的变种使用 next 指针判断上一步能到的最远地方使用 far 指针判断这步内能到的最远地方代码:class Solution { public int jump(int[] nums) { int next = 0; int far = 0; int len =原创 2020-07-24 14:44:28 · 139 阅读 · 0 评论