JavaSE
Java笔记
前滩卷王
You Only Live Once
展开
-
Leetcode--Java--713. 乘积小于 K 的子数组
题目描述给你一个整数数组 nums 和一个整数 k ,请你返回子数组内所有元素的乘积严格小于 k 的连续子数组的数目。样例描述示例 1:输入:nums = [10,5,2,6], k = 100输出:8解释:8 个乘积小于 100 的子数组分别为:[10]、[5]、[2],、[6]、[10,5]、[5,2]、[2,6]、[5,2,6]。需要注意的是 [10,5,2] 并不是乘积小于 100 的子数组。示例 2:输入:nums = [1,2,3], k = 0输出:0思路滑动窗原创 2022-05-05 19:45:52 · 877 阅读 · 0 评论 -
Leetcode--Java--937. 重新排列日志文件
题目描述样例描述示例 1:输入:logs = ["dig1 8 1 5 1","let1 art can","dig2 3 6","let2 own kit dig","let3 art zero"]输出:["let1 art can","let3 art zero","let2 own kit dig","dig1 8 1 5 1","dig2 3 6"]解释:字母日志的内容都不同,所以顺序为 "art can", "art zero", "own kit dig" 。数字日志保留原来的原创 2022-05-03 19:47:15 · 601 阅读 · 0 评论 -
Leetcode--Java--406. 根据身高重建队列
题目描述假设有打乱顺序的一群人站成一个队列,数组 people 表示队列中一些人的属性(不一定按顺序)。每个 people[i] = [hi, ki] 表示第 i 个人的身高为 hi ,前面 正好 有 ki 个身高大于或等于 hi 的人。请你重新构造并返回输入数组 people 所表示的队列。返回的队列应该格式化为数组 queue ,其中 queue[j] = [hj, kj] 是队列中第 j 个人的属性(queue[0] 是排在队列前面的人)。样例描述思路贪心 + 套路排序 (排序 + 插队)原创 2022-03-09 21:41:28 · 324 阅读 · 0 评论 -
Leetcode--Java--468. 验证IP地址
题目描述样例描述示例 1:输入:IP = "172.16.254.1"输出:"IPv4"解释:有效的 IPv4 地址,返回 "IPv4"示例 2:输入:IP = "2001:0db8:85a3:0:0:8A2E:0370:7334"输出:"IPv6"解释:有效的 IPv6 地址,返回 "IPv6"示例 3:输入:IP = "256.256.256.256"输出:"Neither"解释:既不是 IPv4 地址,又不是 IPv6 地址思路模拟 + 先框架再细节本题直原创 2021-12-27 10:34:47 · 1324 阅读 · 0 评论 -
Leetcode--Java--146. LRU 缓存机制
题目描述运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制 。实现 LRUCache 类:LRUCache(int capacity) 以正整数作为容量 capacity 初始化 LRU 缓存int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值,否则返回 -1 。void put(int key, int value) 如果关键字已经存在,则变更其数据值;如果关键字不存在,则插入该组「关键字-值」。当缓存容量达到上限时,它应该在写入新数据之原创 2021-12-20 20:28:38 · 170 阅读 · 0 评论 -
Leetcode--Java--380. O(1) 时间插入、删除和获取随机元素
题目描述实现RandomizedSet 类:RandomizedSet() 初始化 RandomizedSet 对象bool insert(int val) 当元素 val 不存在时,向集合中插入该项,并返回 true ;否则,返回 false 。bool remove(int val) 当元素 val 存在时,从集合中移除该项,并返回 true ;否则,返回 false 。int getRandom() 随机返回现有集合中的一项(测试用例保证调用此方法时集合中至少存在一个元素)。每个元素应该有原创 2021-12-18 11:43:51 · 605 阅读 · 0 评论 -
Leetcode--Java--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]输出:[原创 2021-12-06 10:00:20 · 391 阅读 · 0 评论 -
Leetcode--Java--307. 区域和检索 - 数组可修改
题目描述给你一个数组 nums ,请你完成两类查询,其中一类查询要求更新数组下标对应的值,另一类查询要求返回数组中某个范围内元素的总和。实现 NumArray 类:NumArray(int[] nums) 用整数数组 nums 初始化对象void update(int index, int val) 将 nums[index] 的值更新为 valint sumRange(int left, int right) 返回子数组 nums[left, right] 的总和(即,nums[left] +原创 2021-12-03 11:14:56 · 301 阅读 · 0 评论 -
Leetcode--Java--306. 累加数
题目描述累加数是一个字符串,组成它的数字可以形成累加序列。一个有效的累加序列必须至少包含 3 个数。除了最开始的两个数以外,字符串中的其他数都等于它之前两个数相加的和。给定一个只包含数字 ‘0’-‘9’ 的字符串,编写一个算法来判断给定输入是否是累加数。说明: 累加序列里的数不会以 0 开头,所以不会出现 1, 2, 03 或者 1, 02, 3 的情况。样例描述思路方法一:字符串模拟 + 高精度加法 O(n^3)枚举第一段的长度,枚举第二段的长度,看和是否匹配第三段的长度。枚举中不能原创 2021-12-02 11:32:33 · 488 阅读 · 0 评论 -
Leetcode--Java--786. 第 K 个最小的素数分数
题目描述给你一个按递增顺序排序的数组 arr 和一个整数 k 。数组 arr 由 1 和若干 素数 组成,且其中所有整数互不相同。对于每对满足 0 < i < j < arr.length 的 i 和 j ,可以得到分数 arr[i] / arr[j] 。那么第 k 个最小的分数是多少呢? 以长度为 2 的整数数组返回你的答案, 这里 answer[0] == arr[i] 且 answer[1] == arr[j] 。样例描述示例 1:输入:arr = [1,2,3,5原创 2021-11-29 11:16:14 · 206 阅读 · 0 评论 -
Leetcode--Java--290. 单词规律
题目描述给定一种规律 pattern 和一个字符串 str ,判断 str 是否遵循相同的规律。这里的 遵循 指完全匹配,例如, pattern 里的每个字母和字符串 str 中的每个非空单词之间存在着双向连接的对应规律。样例描述示例1:输入: pattern = "abba", str = "dog cat cat dog"输出: true示例 2:输入:pattern = "abba", str = "dog cat cat fish"输出: false示例 3:输入: pa原创 2021-11-27 11:02:54 · 338 阅读 · 0 评论 -
Leetcode--Java--423. 从英文中重建数字
题目描述给你一个字符串 s ,其中包含字母顺序打乱的用英文单词表示的若干数字(0-9)。按 升序 返回原始的数字。样例描述示例 1:输入:s = "owoztneoer"输出:"012"示例 2:输入:s = "fviefuro"输出:"45"思路简单模拟 + 词频统计 + 脑筋急转弯由题目中单词的特性,可以根据一个特定的顺序来对原字符串拆解单词,保证一次用一个字母来判断一个单词是否存在。比如zero可以用z表示zero是否存在。由上述可以得到一个可行的顺序,0, 8, 3原创 2021-11-24 14:27:19 · 379 阅读 · 0 评论 -
Leetcode--Java--241. 为运算表达式设计优先级
题目描述给定一个含有数字和运算符的字符串,为表达式添加括号,改变其运算优先级以求出不同的结果。你需要给出所有可能的组合的结果。有效的运算符号包含 +, - 以及 * 。样例描述示例 1:输入: "2-1-1"输出: [0, 2]解释: ((2-1)-1) = 0 (2-(1-1)) = 2示例 2:输入: "2*3-4*5"输出: [-34, -14, -10, -10, 10]解释: (2*(3-(4*5))) = -34 ((2*3)-(4*5)) = -14 ((2*原创 2021-11-21 11:46:25 · 473 阅读 · 0 评论 -
Leetcode--Java--520. 检测大写字母
题目描述我们定义,在以下情况时,单词的大写用法是正确的:全部字母都是大写,比如 “USA” 。单词中所有字母都不是大写,比如 “leetcode” 。如果单词不只含有一个字母,只有首字母大写, 比如 “Google” 。给你一个字符串 word 。如果大写用法正确,返回 true ;否则,返回 false 。样例描述我们定义,在以下情况时,单词的大写用法是正确的:全部字母都是大写,比如 "USA" 。单词中所有字母都不是大写,比如 "leetcode" 。如果单词不只含有一个字母,只有原创 2021-11-14 09:53:35 · 180 阅读 · 0 评论 -
Leetcode--Java--151. 翻转字符串里的单词
题目描述给你一个字符串 s ,逐个翻转字符串中的所有 单词 。单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。请你返回一个翻转 s 中单词顺序并用单个空格相连的字符串。说明:输入字符串 s 可以在前面、后面或者单词间包含多余的空格。翻转后单词间应当仅用一个空格分隔。翻转后的字符串中不应包含额外的空格。样例描述示例 1:输入:s = "the sky is blue"输出:"blue is sky the"示例 2:输入:s = " hell原创 2021-11-05 21:38:52 · 232 阅读 · 0 评论 -
Leetcode--Java--102. 二叉树的层序遍历
题目描述给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。样例描述示例:二叉树:[3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回其层序遍历结果:[ [3], [9,20], [15,7]]思路BFS直接用BFS的模板来实现层序遍历。注意题目要求的是二维数组,就是同时记录每一层有哪些结点。因此需要在进出队的过程中,记录当前队中的结点,将队中的原创 2021-10-12 15:01:40 · 164 阅读 · 0 评论 -
Leetcode--Java--434. 字符串中的单词数
题目描述统计字符串中的单词个数,这里的单词指的是连续的不是空格的字符。请注意,你可以假定字符串里不包括任何不可打印的字符。样例描述输入: "Hello, my name is John"输出: 5解释: 这里的单词是指连续的不是空格的字符,所以 "Hello," 算作 1 个单词。思路简单模拟方法一:转化法可以转化为统计每个单词的第一个字符的个数。必须满足条件:该字符不是空格,且前一个位置是空格(初始位置除外)。方法二:直接遍历单词个数,跳过空格跳过空格,注意初始前面全是空原创 2021-10-07 13:59:16 · 196 阅读 · 0 评论 -
Leetcode--Java--77. 组合
题目描述给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。你可以按 任何顺序 返回答案。样例描述示例 1:输入:n = 4, k = 2输出:[ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4],]示例 2:输入:n = 1, k = 1输出:[[1]]思路回溯 + 剪枝 + 栈(用双端队列ArrayDeque实现)回溯遍历所有可能的起点,并剪枝(限定下一个搜索的范围一定比当前数要大)原创 2021-09-24 14:38:28 · 92 阅读 · 0 评论 -
Leetcode--Java--524. 通过删除字母匹配到字典里最长单词
题目描述给你一个字符串 s 和一个字符串数组 dictionary 作为字典,找出并返回字典中最长的字符串,该字符串可以通过删除 s 中的某些字符得到。如果答案不止一个,返回长度最长且字典序最小的字符串。如果答案不存在,则返回空字符串。样例描述示例 1:输入:s = "abpcplea", dictionary = ["ale","apple","monkey","plea"]输出:"apple"示例 2:输入:s = "abpcplea", dictionary = ["a","b",原创 2021-09-14 10:35:12 · 179 阅读 · 0 评论 -
Leetcode--Java--71. 简化路径
题目描述给你一个字符串 path ,表示指向某一文件或目录的 Unix 风格 绝对路径 (以 ‘/’ 开头),请你将其转化为更加简洁的规范路径。在 Unix 风格的文件系统中,一个点(.)表示当前目录本身;此外,两个点 (…) 表示将目录切换到上一级(指向父目录);两者都可以是复杂相对路径的组成部分。任意多个连续的斜杠(即,’//’)都被视为单个斜杠 ‘/’ 。 对于此问题,任何其他格式的点(例如,’…’)均被视为文件/目录名称。遵循下述格式:始终以斜杠 ‘/’ 开头。两个目录名之间必须只有一个斜原创 2021-09-12 16:07:52 · 151 阅读 · 0 评论 -
Leetcode--Java--56. 合并区间
题目描述以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。样例描述示例 1:输入:intervals = [[1,3],[2,6],[8,10],[15,18]]输出:[[1,6],[8,10],[15,18]]解释:区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].示例 2:输入:intervals = [原创 2021-08-28 18:07:12 · 117 阅读 · 0 评论 -
Leetcode--Java--51. N 皇后
题目描述n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。给你一个整数 n ,返回所有不同的 n 皇后问题 的解决方案。每一种解法包含一个不同的 n 皇后问题 的棋子放置方案,该方案中 ‘Q’ 和 ‘.’ 分别代表了皇后和空位。样例描述思路回溯 + 剪枝按行来放置皇后,每行只能放一个。检查当前位置是否可以放。具体检查所在的列,左上的对角线和右上的对角线。不需要检查行,因为每行只有一个。不需要检查左下和右下,这里剪枝了。因为每次放时保证与之前原创 2021-08-28 16:11:19 · 162 阅读 · 0 评论 -
Leetcode--Java--345. 反转字符串中的元音字母
题目描述给你一个字符串 s ,仅反转字符串中的所有元音字母,并返回结果字符串。元音字母包括 ‘a’、‘e’、‘i’、‘o’、‘u’,且可能以大小写两种形式出现。样例描述示例 1:输入:s = "hello"输出:"holle"示例 2:输入:s = "leetcode"输出:"leotcede"思路双指针。首先将字符串转换成字符数组,方便根据索引获取值。注意可能有大写或者小写,可以统一将待判断的字符转化成小写在进行判断。toCharArray(), toLowerCase(原创 2021-08-19 22:13:37 · 305 阅读 · 0 评论 -
Leetcode--Java--1337. 矩阵中战斗力最弱的 K 行
题目描述给你一个大小为 m * n 的矩阵 mat,矩阵由若干军人和平民组成,分别用 1 和 0 表示。请你返回矩阵中战斗力最弱的 k 行的索引,按从最弱到最强排序。如果第 i 行的军人数量少于第 j 行,或者两行军人数量相同但 i 小于 j,那么我们认为第 i 行的战斗力比第 j 行弱。军人 总是 排在一行中的靠前位置,也就是说 1 总是出现在 0 之前。样例描述示例 1:输入:mat = [[1,1,0,0,0], [1,1,1,1,0], [1,0,0,0,0], [1,1,0原创 2021-08-02 14:31:37 · 105 阅读 · 0 评论 -
Leetcode--Java--23. 合并K个升序链表
题目描述给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中,返回合并后的链表。样例描述示例 1:输入:lists = [[1,4,5],[1,3,4],[2,6]]输出:[1,1,2,3,4,4,5,6]解释:链表数组如下:[ 1->4->5, 1->3->4, 2->6]将它们合并到一个有序链表中得到。1->1->2->3->4->4->5->6/** * Def原创 2021-07-27 15:55:48 · 157 阅读 · 0 评论 -
Leetcode--Java--671. 二叉树中第二小的节点
题目描述给定一个非空特殊的二叉树,每个节点都是正数,并且每个节点的子节点数量只能为 2 或 0。如果一个节点有两个子节点的话,那么该节点的值等于两个子节点中较小的一个。更正式地说,root.val = min(root.left.val, root.right.val) 总成立。给出这样的一个二叉树,你需要输出所有节点中的第二小的值。如果第二小的值不存在的话,输出 -1 。样例描述输入:root = [2,2,5,null,null,5,7]输出:5解释:最小的值是 2 ,第二小的值是 5 。原创 2021-07-27 12:51:28 · 78 阅读 · 0 评论 -
Leetcode--Java--17. 电话号码的字母组合
题目描述给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。样例描述示例 1:输入:digits = "23"输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]示例 2:输入:digits = ""输出:[]思路回溯法。 枚举所有组合情况。映射关系用字符串数组比哈希表要更方便。回溯后记得在临时路径中删除加入的值。原创 2021-07-26 19:06:08 · 123 阅读 · 0 评论 -
Leetcode--Java--1743. 从相邻元素对还原数组
题目描述存在一个由 n 个不同元素组成的整数数组 nums ,但你已经记不清具体内容。好在你还记得 nums 中的每一对相邻元素。给你一个二维整数数组 adjacentPairs ,大小为 n - 1 ,其中每个 adjacentPairs[i] = [ui, vi] 表示元素 ui 和 vi 在 nums 中相邻。题目数据保证所有由元素 nums[i] 和 nums[i+1] 组成的相邻元素对都存在于 adjacentPairs 中,存在形式可能是 [nums[i], nums[i+1]] ,也可能原创 2021-07-25 10:42:55 · 180 阅读 · 0 评论 -
Leetcode--Java--1736. 替换隐藏数字得到的最晚时间
题目描述给你一个字符串 time ,格式为 hh:mm(小时:分钟),其中某几位数字被隐藏(用 ? 表示)。有效的时间为 00:00 到 23:59 之间的所有时间,包括 00:00 和 23:59 。替换 time 中隐藏的数字,返回你可以得到的最晚有效时间。样例描述示例 1:输入:time = "2?:?0"输出:"23:50"解释:以数字 '2' 开头的最晚一小时是 23 ,以 '0' 结尾的最晚一分钟是 50 。示例 2:输入:time = "0?:3?"输出:"09:39原创 2021-07-24 19:23:49 · 107 阅读 · 0 评论 -
Leetcode--Java--274. H 指数
题目描述给你一个整数数组 citations ,其中 citations[i] 表示研究者的第 i 篇论文被引用的次数。计算并返回该研究者的 h 指数。h 指数的定义:h 代表“高引用次数”(high citations),一名科研人员的 h 指数是指他(她)的 (n 篇论文中)总共有 h 篇论文分别被引用了至少 h 次。且其余的 n - h 篇论文每篇被引用次数 不超过 h 次。例如:某人的 h 指数是 20,这表示他已发表的论文中,每篇被引用了至少 20 次的论文总共有 20 篇。提示:如果 h原创 2021-07-17 11:00:40 · 160 阅读 · 0 评论 -
Leetcode--Java--451. 根据字符出现频率排序
题目描述给定一个字符串,请将字符串里的字符按照出现的频率降序排列。样例描述输入:"tree"输出:"eert"思路方法一:哈希表+list+StringBufferHaspMap统计每个字符出现的次数keySet方法取出键放进一个list,对list进行降序排序,这里直接用lambda表达式Collections.sort(list, (a, b) -> (first, second)) 表示升序,后面括号中反过来就是降序对每一个字符出现的频次,就循环频次进行拼接到s原创 2021-07-03 11:34:29 · 272 阅读 · 0 评论 -
PriorityQueue设置比较顺序 升序或逆序
设置成降序: Queue heap=new PriorityQueue<>((a, b) -> b.compareTo(a));b<a升序: Queue heap=new PriorityQueue<>((a, b) -> a.compareTo(b));a<b原创 2021-02-11 13:15:41 · 3406 阅读 · 0 评论 -
HashMap
HashMap常用函数:getcontainsKeyput原创 2021-01-29 14:53:51 · 60 阅读 · 0 评论