
LeetcodeJava
java版本leetcode
奔跑の小乌龟
这个作者很懒,什么都没留下…
展开
-
[Leetcode] 120. 三角形最小路径和
自顶向下的最小路径和为 11(即,2 + 3 + 5 + 1 = 11)。也就是说,如果正位于当前行的下标。每一步只能移动到下一行中相邻的结点上。,那么下一步可以移动到下一行的下标。,找出自顶向下的最小路径和。原创 2024-07-30 13:09:47 · 200 阅读 · 0 评论 -
[Leetcode] 343. 整数拆分
343. 整数拆分难度中等833给定一个正整数n,将其拆分为 k 个 正整数 的和(k >= 2),并使这些整数的乘积最大化。返回 你可以获得的最大乘积。示例 1:输入: n = 2输出: 1解释: 2 = 1 + 1, 1 × 1 = 1。示例2:输入: n = 10输出: 36解释: 10 = 3 + 3 + 4, 3 ×3 ×4 = 36。class Solution { public int integerBreak(int n)...原创 2022-05-29 16:36:51 · 275 阅读 · 0 评论 -
[Leetcode] 373. 查找和最小的 K 对数字
373. 查找和最小的 K 对数字给定两个以 升序排列 的整数数组 nums1 和 nums2,以及一个整数 k。定义一对值(u,v),其中第一个元素来自nums1,第二个元素来自 nums2。请找到和最小的 k个数对(u1,v1), (u2,v2) ... (uk,vk)。示例 1:输入: nums1 = [1,7,11], nums2 = [2,4,6], k = 3输出: [1,2],[1,4],[1,6]解释: 返回序列中的前 3 对数: [...原创 2022-05-28 20:47:21 · 249 阅读 · 0 评论 -
[Leetcode] 76. 最小覆盖子串
给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 "" 。注意:对于 t 中重复字符,我们寻找的子字符串中该字符数量必须不少于 t 中该字符数量。如果 s 中存在这样的子串,我们保证它是唯一的答案。示例 1:输入:s = "ADOBECODEBANC", t = "ABC"输出:"BANC"示例 2:输入:s = "a", t = "a"输出:"a"class Solution .原创 2022-05-17 23:44:16 · 266 阅读 · 0 评论 -
[Leetcode] N皇后 I & II
51. N 皇后class Solution { public List<List<String>> solveNQueens(int n) { List<List<String>> solutions = new ArrayList<List<String>>(); int[] queens = new int[n]; Arrays.fill(queens, -1);原创 2022-05-15 20:29:28 · 156 阅读 · 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示例 2:输入:matrix = [[-5...原创 2022-05-15 20:27:13 · 130 阅读 · 0 评论 -
[Leetcode] 动态规划类java题解
139. 单词拆分public class WordBreak { public boolean wordBreak(String s, List<String> wordDict) { Set<String> wordSet = new HashSet<String>(wordDict); boolean[] dp = new boolean[s.length() + 1]; //Boolean会抛空指针原创 2022-05-04 14:34:09 · 677 阅读 · 0 评论 -
[Leetcode] BFS/DFS类java题解记录
130. 被围绕的区域class Solution { public int rows,cols; public void solve(char[][] board) { rows = board.length; cols = board[0].length; for(int i = 0;i<rows;i++){ for(int j = 0;j<cols;j++){原创 2022-05-04 14:04:50 · 702 阅读 · 0 评论 -
[Leetcode] 739. 每日温度
给定一个整数数组temperatures,表示每天的温度,返回一个数组answer,其中answer[i]是指在第 i 天之后,才会有更高的温度。如果气温在这之后都不会升高,请在该位置用0 来代替。示例 1:输入: temperatures = [73,74,75,71,69,72,76,73]输出:[1,1,4,2,1,1,0,0]示例 2:输入: temperatures = [30,40,50,60]输出:[1,1,1,0]示例 3:输入: tempera...原创 2022-04-23 21:53:08 · 133 阅读 · 0 评论 -
[Leetcode] 438. 找到字符串中所有字母异位词
给定两个字符串s和 p,找到s中所有p的异位词的子串,返回这些子串的起始索引。不考虑答案输出的顺序。异位词 指由相同字母重排列形成的字符串(包括相同的字符串)。示例1:输入: s = "cbaebabacd", p = "abc"输出: [0,6]解释:起始索引等于 0 的子串是 "cba", 它是 "abc" 的异位词。起始索引等于 6 的子串是 "bac", 它是 "abc" 的异位词。示例 2:输入: s = "abab", p = "ab"输出: ...原创 2022-04-23 21:17:42 · 135 阅读 · 0 评论 -
[Leetcode] 91. 解码方法
一条包含字母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-04-23 20:36:30 · 159 阅读 · 0 评论 -
[Leetcode] 字符串运算题
415. 字符串相加给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和并同样以字符串形式返回。你不能使用任何內建的用于处理大整数的库(比如 BigInteger), 也不能直接将输入的字符串转换为整数形式。示例 1:输入:num1 = "11", num2 = "123"输出:"134"示例 2:输入:num1 = "456", num2 = "77"输出:"533"示例 3:输入:num1 = "0", num2 = "0"输出:"0"提示:1.原创 2022-04-23 19:39:02 · 223 阅读 · 0 评论 -
[Leetcode] 102-200部分java题解记录
102. 二叉树的层序遍历class Solution { public List<List<Integer>> levelOrder(TreeNode root) { List<List<Integer>> res = new ArrayList<>(); if(root == null){ return res; } LinkedList<原创 2022-04-19 20:55:22 · 411 阅读 · 0 评论 -
[Leetcode] 1-100部分java题解记录
1. 两数之和class Solution { public int[] twoSum(int[] nums, int target) { int[] numsCopy = nums.clone(); Arrays.sort(numsCopy); int i = 0, j = nums.length - 1; while (i < j) { if (numsCopy[i] + numsCopy[j]原创 2022-04-16 17:50:33 · 1084 阅读 · 0 评论 -
[Leetcode] 451. 根据字符出现频率排序
给定一个字符串 s ,根据字符出现的 频率 对其进行 降序排序 。一个字符出现的 频率 是它出现在字符串中的次数。返回 已排序的字符串。如果有多个答案,返回其中任何一个。示例 1:输入: s = "tree"输出: "eert"解释: 'e'出现两次,'r'和't'都只出现一次。因此'e'必须出现在'r'和't'之前。此外,"eetr"也是一个有效的答案。示例 2:输入: s = "cccaaa"输出: "cccaaa"解释: 'c'和'a'都出现三次。此外,"aaaccc.原创 2022-04-09 16:59:16 · 187 阅读 · 0 评论 -
[Leetcode] Hash表+排序
给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。示例 1:输入: nums = [1,1,1,2,2,3], k = 2输出: [1,2]示例 2:输入: nums = [1], k = 1输出: [1]提示:1 <= nums.length <= 105k 的取值范围是 [1, 数组中不相同的元素的个数]题目数据保证答案唯一,换句话说,数组中前 k 个高频元素的集合是唯一的code:c.原创 2022-04-09 16:53:30 · 219 阅读 · 0 评论 -
[Leetcode] 数组题汇总
152. 乘积最大子数组public class MaxProduct152 { public int maxProduct(int[] nums) { int n = nums.length; int[] dp = new int[n]; dp[0]=nums[0]; int result = nums[0], nmax = nums[0], nmin = nums[0]; for(int i = 1;i&l原创 2022-04-08 19:24:16 · 440 阅读 · 0 评论 -
[Leetcode] 前缀和汇总
针对连续子数组和相关问题 一般采用前缀和 + hashmap是K的倍数 采取同余定理相关题目:523. 连续的子数组和 public class CheckSubarraySum { // 前缀和 + 同余定理 + hashmap public boolean checkSubarraySum(int[] nums, int k) { int m = nums.length; if (m < 2) { re原创 2022-04-08 16:30:08 · 867 阅读 · 0 评论 -
[Leetcode]477. 汉明距离总和
两个整数的汉明距离 指的是这两个数字的二进制数对应位不同的数量。给你一个整数数组 nums,请你计算并返回 nums 中任意两个数之间 汉明距离的总和 。示例 1:输入:nums = [4,14,2]输出:6解释:在二进制表示中,4 表示为 0100 ,14 表示为 1110 ,2表示为 0010 。(这样表示是为了体现后四位之间关系)所以答案为:HammingDistance(4, 14) + HammingDistance(4, 2) + HammingDistance(14, 2.原创 2022-04-08 14:43:57 · 126 阅读 · 0 评论 -
[Leetcode]486. 预测赢家
给你一个整数数组 nums 。玩家 1 和玩家 2 基于这个数组设计了一个游戏。玩家 1 和玩家 2 轮流进行自己的回合,玩家 1 先手。开始时,两个玩家的初始分值都是 0 。每一回合,玩家从数组的任意一端取一个数字(即,nums[0] 或 nums[nums.length - 1]),取到的数字将会从数组中移除(数组长度减 1 )。玩家选中的数字将会加到他的得分上。当数组中没有剩余数字可取时,游戏结束。如果玩家 1 能成为赢家,返回 true 。如果两个玩家得分相等,同样认为玩家 1 是游戏的赢家原创 2022-04-08 14:34:03 · 168 阅读 · 0 评论 -
[Leetcode]738. 单调递增的数字
当且仅当每个相邻位数上的数字x和y满足x <= y时,我们称这个整数是单调递增的。给定一个整数 n ,返回 小于或等于 n 的最大数字,且数字呈 单调递增 。示例 1:输入: n = 10输出: 9示例 2:输入: n = 1234输出: 1234示例 3:输入: n = 332输出: 299code:public class MonotoneIncreasingDigits { // 738. 单调递增的数字 public...原创 2022-04-08 14:11:41 · 288 阅读 · 0 评论 -
[Leetcode]135. 分发糖果
n 个孩子站成一排。给你一个整数数组 ratings 表示每个孩子的评分。你需要按照以下要求,给这些孩子分发糖果:每个孩子至少分配到 1 个糖果。相邻两个孩子评分更高的孩子会获得更多的糖果。请你给每个孩子分发糖果,计算并返回需要准备的 最少糖果数目 。示例 1:输入:ratings = [1,0,2]输出:5解释:你可以分别给第一个、第二个、第三个孩子分发 2、1、2 颗糖果。示例2:输入:ratings = [1,2,2]输出:4解释:你可以分别给第一个、第二个、第三个.原创 2022-04-07 22:55:02 · 87 阅读 · 0 评论 -
[Leetcode] 207 & 210 课程表
你这个学期必须选修 numCourses 门课程,记为0到numCourses - 1 。在选修某些课程之前需要一些先修课程。 先修课程按数组prerequisites 给出,其中prerequisites[i] = [ai, bi] ,表示如果要学习课程ai 则 必须 先学习课程bi 。例如,先修课程对[0, 1] 表示:想要学习课程 0 ,你需要先完成课程 1 。请你判断是否可能完成所有课程的学习?如果可以,返回 true ;否则,返回 false 。code:pu...原创 2022-04-06 17:49:22 · 200 阅读 · 0 评论 -
[Leetcode]491. 递增子序列
题目:给你一个整数数组 nums ,找出并返回所有该数组中不同的递增子序列,递增子序列中 至少有两个元素 。你可以按 任意顺序 返回答案。数组中可能含有重复元素,如出现两个整数相等,也可以视作递增序列的一种特殊情况。示例 1:输入:nums = [4,6,7,7]输出:[[4,6],[4,6,7],[4,6,7,7],[4,7],[4,7,7],[6,7],[6,7,7],[7,7]]示例 2:输入:nums = [4,4,3,2,1]输出:[[4,4]]提示:1 .原创 2022-04-03 14:18:05 · 112 阅读 · 0 评论 -
[Leetcode] 377. 组合总和 Ⅳ
给你一个由 不同 整数组成的数组 nums ,和一个目标整数 target 。请你从 nums 中找出并返回总和为 target 的元素组合的个数。题目数据保证答案符合 32 位整数范围。示例 1:输入:nums = [1,2,3], target = 4输出:7解释:所有可能的组合为:(1, 1, 1, 1)(1, 1, 2)(1, 2, 1)(1, 3)(2, 1, 1)(2, 2)(3, 1)请注意,顺序不同的序列被视作不同的组合。示例 2:输入:nums =原创 2022-04-03 19:37:35 · 287 阅读 · 0 评论 -
[Leetcode]318. 最大单词长度乘积
给你一个字符串数组words ,找出并返回 length(words[i]) * length(words[j])的最大值,并且这两个单词不含有公共字母。如果不存在这样的两个单词,返回 0 。示例1:输入:words = ["abcw","baz","foo","bar","xtfn","abcdef"]输出:16解释:这两个单词为 "abcw", "xtfn"。示例 2:输入:words = ["a","ab","abc","d","cd","bcd","abcd"]输出:4...原创 2022-04-03 17:44:06 · 308 阅读 · 0 评论 -
[Leetcode]846. 一手顺子
Alice 手中有一把牌,她想要重新排列这些牌,分成若干组,使每一组的牌数都是 groupSize ,并且由 groupSize 张连续的牌组成。给你一个整数数组 hand 其中 hand[i] 是写在第 i 张牌,和一个整数 groupSize 。如果她可能重新排列这些牌,返回 true ;否则,返回 false 。示例 1:输入:hand = [1,2,3,6,2,3,4,7,8], groupSize = 3输出:true解释:Alice 手中的牌可以被重新排列为 [1,2,3],[2原创 2022-04-03 15:55:02 · 101 阅读 · 0 评论 -
[Leetcode] 树相关汇总java
输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构)B是A的子结构, 即 A中有出现和B相同的结构和节点值。例如:给定的树 A:3/ \4 5/ \1 2给定的树 B:4/1返回 true,因为 B 与 A 的一个子树拥有相同的结构和节点值。示例 1:输入:A = [1,2,3], B = [3,1]输出:false示例 2:输入:A = [3,4,5,1,2], B = [4,...原创 2022-04-06 10:42:32 · 99 阅读 · 0 评论 -
[Leetcode]367. 有效的完全平方数
给定一个 正整数 num ,编写一个函数,如果 num 是一个完全平方数,则返回 true ,否则返回 false 。进阶:不要 使用任何内置的库函数,如sqrt 。示例 1:输入:num = 16输出:true示例 2:输入:num = 14输出:false提示:1 <= num <= 2^31 - 1code:public class IsPerfectSquare { // 方法1 public boolean isPer...原创 2022-04-05 13:27:22 · 154 阅读 · 0 评论 -
[Leetcode]368. 最大整除子集
给你一个由 无重复 正整数组成的集合 nums ,请你找出并返回其中最大的整除子集 answer ,子集中每一元素对 (answer[i], answer[j]) 都应当满足:answer[i] % answer[j] == 0 ,或answer[j] % answer[i] == 0如果存在多个有效解子集,返回其中任何一个均可。示例 1:输入:nums = [1,2,3]输出:[1,2]解释:[1,3] 也会被视为正确答案。示例 2:输入:nums = [1,2,4,8]输出:[原创 2022-04-05 14:47:13 · 226 阅读 · 0 评论 -
[Leetcode]329. 矩阵中的最长递增路径
给定一个m x n 整数矩阵matrix ,找出其中 最长递增路径 的长度。对于每个单元格,你可以往上,下,左,右四个方向移动。 你 不能 在 对角线 方向上移动或移动到 边界外(即不允许环绕)。示例 1:输入:matrix = [[9,9,4],[6,6,8],[2,1,1]]输出:4解释:最长递增路径为[1, 2, 6, 9]。示例 2:输入:matrix = [[3,4,5],[3,2,6],[2,2,1]]输出:4解释:最长递增路径是[3, 4,...原创 2022-04-06 15:55:24 · 249 阅读 · 0 评论 -
[Leetcode]617. 合并二叉树
给你两棵二叉树: root1 和 root2 。想象一下,当你将其中一棵覆盖到另一棵之上时,两棵树上的一些节点将会重叠(而另一些不会)。你需要将这两棵树合并成一棵新二叉树。合并的规则是:如果两个节点重叠,那么将这两个节点的值相加作为合并后节点的新值;否则,不为 null 的节点将直接作为新二叉树的节点。返回合并后的二叉树。注意: 合并过程必须从两个树的根节点开始。示例 1:输入:root1 = [1,3,2,5], root2 = [2,1,3,null,4,null,7]输原创 2022-04-05 20:31:25 · 106 阅读 · 0 评论 -
[Leetcode]79. 单词搜索
给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。示例 1:输入:board = [["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]], word = "ABCCED"输出:true示原创 2022-04-06 16:34:17 · 91 阅读 · 0 评论 -
[Leetcode]567. 字符串的排列
题目给你两个字符串 s1 和 s2 ,写一个函数来判断 s2 是否包含 s1 的排列。如果是,返回 true ;否则,返回 false 。换句话说,s1 的排列之一是 s2 的 子串 。示例 1:输入:s1 = "ab" s2 = "eidbaooo"输出:true解释:s2 包含 s1 的排列之一 ("ba").示例 2:输入:s1= "ab" s2 = "eidboaoo"输出:false提示:1 <= s1.length, s2.length <= .原创 2022-04-03 12:04:44 · 401 阅读 · 0 评论 -
[Leetcode]673. 最长递增子序列的个数
给定一个未排序的整数数组nums,返回最长递增子序列的个数。注意这个数列必须是 严格 递增的。示例 1:输入: [1,3,5,4,7]输出: 2解释: 有两个最长递增子序列,分别是 [1, 3, 4, 7] 和[1, 3, 5, 7]。示例 2:输入: [2,2,2,2,2]输出: 5解释: 最长递增子序列的长度是1,并且存在5个子序列的长度为1,因此输出5。提示:1 <= nums.length <= 2000-106<= num...原创 2022-04-05 20:09:54 · 433 阅读 · 0 评论 -
[Leetcode]402. 移掉 K 位数字
给你一个以字符串表示的非负整数num 和一个整数 k ,移除这个数中的 k 位数字,使得剩下的数字最小。请你以字符串形式返回这个最小的数字。示例 1 :输入:num = "1432219", k = 3输出:"1219"解释:移除掉三个数字 4, 3, 和 2 形成一个新的最小的数字 1219 。示例 2 :输入:num = "10200", k = 1输出:"200"解释:移掉首位的 1 剩下的数字为 200. 注意输出不能有任何前导零。示例 3 :输入:num = "1..原创 2022-04-05 17:08:04 · 122 阅读 · 0 评论 -
[Leetcode]455. 分发饼干
假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i,都有一个胃口值g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j,都有一个尺寸 s[j]。如果 s[j]>= g[i],我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。示例1:输入: g = [1,2,3], s = [1,1]输出: 1解释:你有三个孩子和两块小饼干,3个孩子的胃口值...原创 2022-04-03 14:51:32 · 175 阅读 · 0 评论 -
[Leetcode]201. 数字范围按位与
给你两个整数 left 和 right ,表示区间 [left, right] ,返回此区间内所有数字 按位与 的结果(包含 left 、right 端点)。示例 1:输入:left = 5, right = 7输出:4示例 2:输入:left = 0, right = 0输出:0示例 3:输入:left = 1, right = 2147483647输出:0提示:0 <= left <= right <= 231 - 1code:cla.原创 2022-04-05 15:55:00 · 195 阅读 · 0 评论 -
[Leetcode]剑指 Offer 45. 把数组排成最小的数
输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。示例 1:输入: [10,2]输出: "102"示例2:输入: [3,30,34,5,9]输出: "3033459"提示:0 < nums.length <= 100code:public class MinNumber { // 剑指 Offer 45. 把数组排成最小的数 public String minNumber(int[] nums).原创 2022-04-06 11:21:15 · 112 阅读 · 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:提示:1原创 2022-04-05 17:57:55 · 109 阅读 · 0 评论