![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
力扣
sqzr316
这个作者很懒,什么都没留下…
展开
-
剑指 Offer II 036. 后缀表达式 Java题解
有效的算符包括 +、-、*、/。每个运算对象可以是整数,也可以是另一个逆波兰表达式。逆波兰表达式是一种后缀表达式,所谓后缀就是指算符写在后面。根据 逆波兰表示法,求该后缀表达式的计算结果。原创 2022-11-09 16:19:43 · 239 阅读 · 1 评论 -
剑指 Offer II 035. 最小时间差 Java题解
给定一个 24 小时制(小时:分钟 “HH:MM”)的时间列表,找出列表中任意两个时间的最小时间差并以分钟数表示。原创 2022-11-02 12:05:38 · 259 阅读 · 0 评论 -
【leetcode】483. 最小好进制 Java题解
以字符串的形式给出 n , 以字符串的形式返回 n 的最小好进制 。如果 n 的 k(k>=2) 进制数的所有数位全为1,则称 k(k>=2) 是 n 的一个好进制 。示例 1:输入:n = "13"输出:"3"解释:13 的 3 进制是 111。示例 2:输入:n = "4681"输出:"8"解释:4681 的 8 进制是 11111。示例 3:输入:n = "1000000000000000000"输出:"999999999999999999"解释:1000原创 2022-04-29 23:26:57 · 730 阅读 · 0 评论 -
【Java题解】112. 路径总和
给你二叉树的根节点 root 和一个表示目标和的整数 targetSum ,判断该树中是否存在 根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和 targetSum 。叶子节点 是指没有子节点的节点。示例 1:输入:root = [5,4,8,11,null,13,4,7,2,null,null,null,1], targetSum = 22输出:true示例 2:输入:root = [1,2,3], targetSum = 5输出:false示例 3:输入:ro.原创 2021-11-12 11:33:46 · 696 阅读 · 0 评论 -
【Java题解】110. 平衡二叉树
给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。示例 1:输入:root = [3,9,20,null,null,15,7]输出:true示例 2:输入:root = [1,2,2,3,3,null,null,4,4]输出:false示例 3:输入:root = []输出:true方法一:判断每一节点的左右子树高度的差。递归。代码:class Solution .原创 2021-11-12 11:27:51 · 329 阅读 · 0 评论 -
108. 将有序数组转换为二叉搜索树
给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。示例 1:输入:nums = [-10,-3,0,5,9] 输出:[0,-3,9,-10,null,5]解释:[0,-10,5,null,-3,null,9] 也将被视为正确答案:方法一:递归,从数组的中间元素(满足平衡二叉树)开始进行递归构建二叉树,按照中序遍历的顺序进行构建。代码:class.原创 2021-11-12 11:24:40 · 4180 阅读 · 0 评论 -
【Java题解】349. 两个数组的交集
给定两个数组,编写一个函数来计算它们的交集。示例 1:输入:nums1 = [1,2,2,1], nums2 = [2,2]输出:[2]示例 2:输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出:[9,4]说明:输出结果中的每个元素一定是唯一的。 我们可以不考虑输出结果的顺序。方法一:排序双指针遍历两个数组,把相等的元素放入到res数组中。相等则判断res的前面一个是否与待添加的元素相等,相等则不添加,否则添加,因为是有序的,所以相.原创 2021-11-12 11:39:26 · 186 阅读 · 0 评论 -
【Java题解】21. 合并两个有序链表
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例 1:输入:l1 = [1,2,4], l2 = [1,3,4]输出:[1,1,2,3,4,4]示例 2:输入:l1 = [], l2 = []输出:[]示例 3:输入:l1 = [], l2 = [0]输出:[0]提示:两个链表的节点数目范围是 [0, 50]-100 <= Node.val <= 100l1 和 l2 均按 非递减顺序 排列方法一.原创 2021-11-11 21:51:33 · 306 阅读 · 0 评论 -
【Java题解】剑指 Offer 06. 从尾到头打印链表
输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。示例 1:输入:head = [1,3,2]输出:[2,3,1]限制:0 <= 链表长度 <= 10000方法一:遍历反转链表,遍历链表,存储数值。代码:class Solution { public int[] reversePrint(ListNode head) { // 暴力 遍历 反转链表 n ListNode pre = null, cur = h.原创 2021-11-11 21:42:32 · 199 阅读 · 0 评论 -
【Java题解】面试题 08.06. 汉诺塔问题
在经典汉诺塔问题中,有 3 根柱子及 N个不同大小的穿孔圆盘,盘子可以滑入任意一根柱子。一开始,所有盘子自上而下按升序依次套在第一根柱子上(即每一个盘子只能放在更大的盘子上面)。移动圆盘时受到以下限制:(1) 每次只能移动一个盘子; (2) 盘子只能从柱子顶端滑出移到下一根柱子; (3) 盘子只能叠在比它大的盘子上。请编写程序,用栈将所有盘子从第一根柱子移到最后一根柱子。你需要原地修改栈。示例1:输入:A = [2, 1, 0], B = [], C = []输出:C = [2, 1, .原创 2021-11-11 21:39:27 · 133 阅读 · 0 评论 -
【Java题解】剑指 Offer 06. 从尾到头打印链表
定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL限制:0 <= 节点个数 <= 5000方法一:遍历链表,反转链表。可以直接遍历,也可以用递归。代码:class Solution { public ListNode reverseList(ListNode head) { .原创 2021-11-11 21:21:48 · 206 阅读 · 0 评论 -
【Java题解】234. 回文链表
给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。示例 1:输入:head = [1,2,2,1]输出:true示例 2:输入:head = [1,2]输出:false提示:链表中节点数目在范围[1, 105] 内0 <= Node.val <= 9方法一:快慢指针慢指针一次走一步,快指针一次走两步。边走边反转链表,这样,fast指针走完链表,可以得到两条链表。遍历对比即可得到是否是回文.原创 2021-11-11 21:08:45 · 125 阅读 · 0 评论 -
【Java题解】804. 唯一摩尔斯密码词
国际摩尔斯密码定义一种标准编码方式,将每个字母对应于一个由一系列点和短线组成的字符串, 比如: “a” 对应 “.-”, “b” 对应“-…”, “c” 对应 “-.-.”, 等等。为了方便,所有26个英文字母对应摩尔斯密码表如下:[".-","-…","-.-.","-…",".","…-.","–.","…","…",".—","-.-",".-…","–","-.","—",".–.","–.-",".-.","…","-","…-","…-",".–","-…-","-.–","–…"]给.原创 2021-11-11 20:58:14 · 106 阅读 · 0 评论 -
【Java题解】83. 删除排序链表中的重复元素
存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除所有重复的元素,使每个元素 只出现一次 。返回同样按升序排列的结果链表。示例 1:输入:head = [1,1,2] 输出:[1,2]示例 2:输入:head = [1,1,2,3,3]输出:[1,2,3]提示:链表中节点数目在范围 [0, 300] 内-100 <= Node.val <= 100题目数据保证链表已经按升序排列方法一:遍历链表 删除和下一个元素相同的元素的下一个节点代码原创 2021-11-11 20:34:25 · 397 阅读 · 0 评论 -
【Java题解】7. 整数反转
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。假设环境不允许存储 64 位整数(有符号或无符号)。示例 1:输入:x = 123输出:321示例 2:输入:x = -123输出:-321示例 3:输入:x = 120输出:21示例 4:输入:x = 0输出:0提示:-231 <= x <= 231 - 1方法一:.原创 2021-11-11 20:13:12 · 267 阅读 · 0 评论 -
【Java题解】53. 最大子序和
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例 1:输入:nums = [-2,1,-3,4,-1,2,1,-5,4]输出:6解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。示例 2:输入:nums = [1]输出:1示例 3:输入:nums = [0]输出:0示例 4:输入:nums = [-1]输出:-1示例 5:输入:nums = [-100000]输出:-100000提示.原创 2021-11-11 18:54:27 · 238 阅读 · 0 评论 -
【Java题解】19. 删除链表的倒数第 N 个结点
给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。示例 1:输入:head = [1,2,3,4,5], n = 2输出:[1,2,3,5]示例 2:输入:head = [1], n = 1输出:[]示例 3:输入:head = [1,2], n = 1输出:[1]提示:链表中结点的数目为 sz1 <= sz <= 300 <= Node.val <= 1001 <= n <= sz方法一:找到倒数第.原创 2021-11-11 18:29:56 · 448 阅读 · 0 评论 -
【Java题解】剑指 Offer 43. 1~n 整数中 1 出现的次数
输入一个整数 n ,求1~n这n个整数的十进制表示中1出现的次数。例如,输入12,1~12这些整数中包含1 的数字有1、10、11和12,1一共出现了5次。示例 1:输入:n = 12输出:5示例 2:输入:n = 13输出:6限制:1 <= n < 2^31方法一:暴力遍历,数一下1-n的数中,每一个数中1的个数。超时。代码:class Solution { public int countDigitOne(int n) { .原创 2021-11-09 17:10:52 · 295 阅读 · 0 评论 -
剑指 Offer 44. 数字序列中某一位的数字
数字以0123456789101112131415…的格式序列化到一个字符序列中。在这个序列中,第5位(从下标0开始计数)是5,第13位是1,第19位是4,等等。请写一个函数,求任意第n位对应的数字。示例 1:输入:n = 3输出:3示例 2:输入:n = 11输出:0限制:0 <= n < 2^31方法一:规律推导。推导过程见:leetcode题解以下是个人写的带注释理解的代码。class Solution { public int find.原创 2021-11-07 12:02:17 · 57 阅读 · 0 评论 -
【Java题解】剑指 Offer 37. 序列化二叉树
请实现两个函数,分别用来序列化和反序列化二叉树。你需要设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 /反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。提示:输入输出格式与 LeetCode 目前使用的方式一致,详情请参阅 LeetCode序列化二叉树的格式。你并非必须采取这种方式,你也可以采用其他的方法解决这个问题。示例:输入:root = [1,2,3,null,null,4,5]输出:[1,2,3,nul.原创 2021-11-01 12:54:13 · 71 阅读 · 0 评论 -
【Java题解】剑指 Offer 17. 打印从1到最大的n位数
输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。示例 1:输入: n = 1输出: [1,2,3,4,5,6,7,8,9]说明:用返回一个整数列表来代替打印n 为正整数方法一:经过分析,是打印,1-10^n - 1之间的数字。代码:class Solution { public int[] printNumbers(int n) { int idx = 0; .原创 2021-11-01 12:03:45 · 75 阅读 · 0 评论 -
【Java题解】面试题 03.04. 化栈为队
实现一个MyQueue类,该类用两个栈来实现一个队列。示例:MyQueue queue = new MyQueue();queue.push(1);queue.push(2);queue.peek(); // 返回 1queue.pop(); //返回 1queue.empty(); // 返回 false说明:你只能使用标准的栈操作 – 也就是只有 push to top, peek/pop from top, size 和 is empty操作是合法的。 你所使用的语.原创 2021-10-30 00:04:58 · 91 阅读 · 0 评论 -
【Java题解】面试题 03.02. 栈的最小值
请设计一个栈,除了常规栈支持的pop与push函数以外,还支持min函数,该函数返回栈元素中的最小值。执行push、pop和min操作的时间复杂度必须为O(1)。示例:MinStack minStack = new MinStack();minStack.push(-2);minStack.push(0);minStack.push(-3);minStack.getMin(); --> 返回 -3.minStack.pop();minStack.top(); --&.原创 2021-10-29 23:56:01 · 189 阅读 · 0 评论 -
【Java题解】面试题 02.01. 移除重复节点
编写代码,移除未排序链表中的重复节点。保留最开始出现的节点。示例1:输入:[1, 2, 3, 3, 2, 1]输出:[1, 2, 3]示例2:输入:[1, 1, 1, 1, 2]输出:[1, 2]提示:链表长度在[0, 20000]范围内。链表元素在[0, 20000]范围内。进阶:如果不得使用临时缓冲区,该怎么解决?方法一:双重循环。定义两个指针,i, j 用来控制循环,还需要一个指针pre用于删除重复节点。代码:class Solution { .原创 2021-10-29 23:49:01 · 107 阅读 · 0 评论 -
【Java题解】剑指 Offer 62. 圆圈中最后剩下的数字
0,1,···,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字(删除后从下一个数字开始计数)。求出这个圆圈里剩下的最后一个数字。例如,0、1、2、3、4这5个数字组成一个圆圈,从数字0开始每次删除第3个数字,则删除的前4个数字依次是2、0、4、1,因此最后剩下的数字是3。示例 1:输入: n = 5, m = 3输出: 3示例 2:输入: n = 10, m = 17输出: 2限制:1 <= n <= 10^51 <= m &l.原创 2021-10-29 21:02:48 · 133 阅读 · 0 评论 -
【Java题解】剑指 Offer 57 - II. 和为s的连续正数序列
输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。示例 1:输入:target = 9输出:[[2,3,4],[4,5]]示例 2:输入:target = 15输出:[[1,2,3,4,5],[4,5,6],[7,8]]限制:1 <= target <= 10^5方法一:滑动窗口。在1 - n的数字上,定义一个滑动窗口,如果和为target,那么就添加.原创 2021-10-29 20:21:50 · 59 阅读 · 0 评论 -
【Java题解】剑指 Offer 14- I. 剪绳子
给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m、n都是整数,n>1并且m>1),每段绳子的长度记为k[0],k[1]…k[m-1] 。请问 k[0]k[1]…*k[m-1]可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。示例 1:输入: 2输出: 1解释: 2 = 1 + 1, 1 × 1 = 1示例 2:输入: 10输出: 36解释: 10 = 3 + 3 + 4, 3 × 3 × .原创 2021-10-29 20:09:34 · 131 阅读 · 0 评论 -
【Java题解】面试题 17.04. 消失的数字
数组nums包含从0到n的所有整数,但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在O(n)时间内完成吗?注意:本题相对书上原题稍作改动示例 1:输入:[3,0,1]输出:2示例 2:输入:[9,6,4,2,3,5,7,0,1]输出:8方法一:暴力。排序,直接对比查找由于数组中缺失了0 - n中的一个数字,也就是说,长度为 n - 1排序后,对比其下标和对应的值。找到了就返回,否则就是n代码:class Solution { public int .原创 2021-10-29 19:42:58 · 304 阅读 · 0 评论 -
【Java题解】剑指 Offer 59 - II. 队列的最大值
请定义一个队列并实现函数 max_value 得到队列里的最大值,要求函数max_value、push_back 和 pop_front的均摊时间复杂度都是O(1)。若队列为空,pop_front 和 max_value 需要返回 -1示例 1:输入:[“MaxQueue”,“push_back”,“push_back”,“max_value”,“pop_front”,“max_value”][[],[1],[2],[],[],[]]输出: [null,null,null,2,1,2].原创 2021-10-29 18:24:35 · 92 阅读 · 0 评论 -
【Java题解】剑指 Offer 59 - I. 滑动窗口的最大值
给定一个数组 nums 和滑动窗口的大小 k,请找出所有滑动窗口里的最大值。提示:你可以假设 k 总是有效的,在输入数组不为空的情况下,1 ≤ k ≤ 输入数组的大小。方法一:暴力。定义一个长度为滑动窗口可滑动长度的数组,用来记录每一个窗口中的最大值。代码:class Solution { public int[] maxSlidingWindow(int[] nums, int k) { int len = nums.length; if.原创 2021-10-29 18:15:55 · 113 阅读 · 0 评论 -
【Java题解】剑指 Offer 20. 表示数值的字符串
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。数值(按顺序)可以分成以下几个部分:若干空格一个 小数 或者 整数 (可选)一个 ‘e’ 或 ‘E’ ,后面跟着一个 整数若干空格小数(按顺序)可以分成以下几个部分:(可选)一个符号字符(’+’ 或 ‘-’)下述格式之一:至少一位数字,后面跟着一个点 ‘.’至少一位数字,后面跟着一个点 ‘.’,后面再跟着至少一位数字一个点 ‘.’ ,后面跟着至少一位数字整数(按顺序)可以分成以下几个部分:(可选)一个符号字符.原创 2021-10-29 18:12:23 · 107 阅读 · 0 评论 -
【Java题解】剑指 Offer 67. 把字符串转换成整数
写一个函数 StrToInt,实现把字符串转换成整数这个功能。不能使用 atoi 或者其他类似的库函数。首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。该字符串除了有效的整数部分之后也可能会存在多余的字符,这些字符可以被忽略,它们对于函数不应该造成影响。注意:假如该字符串中的第一个非.原创 2021-10-29 17:58:55 · 120 阅读 · 0 评论 -
【Java题解】面试题 01.09. 字符串轮转
字符串轮转。给定两个字符串s1和s2,请编写代码检查s2是否为s1旋转而成(比如,waterbottle是erbottlewat旋转后的字符串)。示例1:输入:s1 = “waterbottle”, s2 = “erbottlewat”输出:True示例2:输入:s1 = “aa”, s2 = “aba”输出:False提示:字符串长度在[0, 100000]范围内。说明:你能只调用一次检查子串的方法吗?方法一:暴力对比。首先特判一下,s1,s2长度为0,re.原创 2021-10-28 21:40:11 · 172 阅读 · 0 评论 -
【Java题解】剑指 Offer 31. 栈的压入、弹出序列
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列{1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2,1} 是该压栈序列对应的一个弹出序列,但 {4,3,5,1,2}就不可能是该压栈序列的弹出序列。示例 1:输入:pushed = [1,2,3,4,5], popped = [4,5,3,2,1]输出:true 解释:我们可以按以下顺序执行:push(1), push(2), push(3), push.原创 2021-10-27 13:30:25 · 63 阅读 · 0 评论 -
【Java题解】面试题 01.06. 字符串压缩
字符串压缩。利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能。比如,字符串aabcccccaaa会变为a2b1c5a3。若“压缩”后的字符串没有变短,则返回原先的字符串。你可以假设字符串中只包含大小写英文字母(a至z)。示例1:输入:“aabcccccaaa”输出:“a2b1c5a3”示例2:输入:“abbccd”输出:“abbccd”解释:“abbccd"压缩后为"a1b2c2d1”,比原字符串长度更长。提示:字符串长度在[0, 50000]范围内。方法一.原创 2021-10-27 12:09:09 · 177 阅读 · 0 评论 -
【Java题解】剑指 Offer 29. 顺时针打印矩阵
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。示例 1:输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输出:[1,2,3,6,9,8,7,4,5]示例 2:输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]输出:[1,2,3,4,8,12,11,10,9,5,6,7]限制:0 <= matrix.length <= 1000 <= matrix[i].length <.原创 2021-10-27 11:56:11 · 87 阅读 · 0 评论 -
【Java题解】面试题 01.04. 回文排列
给定一个字符串,编写一个函数判定其是否为某个回文串的排列之一。回文串是指正反两个方向都一样的单词或短语。排列是指字母的重新排列。回文串不一定是字典当中的单词。示例1:输入:“tactcoa”输出:true(排列有"tacocat"、“atcocta”,等等)方法一:要保证这个字符串是某个回文串的排列之一,那只需要保证,它其中的字符满足:成对出现成对出现,剩余一个用hash表计数,hashset,如果存在了,则置为0即可。最后判断hashset的size <= 1即可。这.原创 2021-10-27 10:47:19 · 293 阅读 · 0 评论 -
【Java题解】剑指 Offer 66. 构建乘积数组
给定一个数组 A[0,1,…,n-1],请构建一个数组 B[0,1,…,n-1],其中 B[i] 的值是数组 A 中除了下标 i以外的元素的积, 即 B[i]=A[0]×A[1]×…×A[i-1]×A[i+1]×…×A[n-1]。不能使用除法。示例:输入: [1,2,3,4,5]输出: [120,60,40,30,24]提示:所有元素乘积之和不会溢出 32 位整数a.length <= 100000方法一:动态规划。先从0 - length求左边所有元素的乘积,放到一.原创 2021-10-26 23:23:33 · 83 阅读 · 0 评论 -
【Java题解】剑指 Offer 39. 数组中出现次数超过一半的数字
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例 1:输入: [1, 2, 3, 2, 2, 2, 5, 4, 2]输出: 2限制:1 <= 数组长度 <= 50000方法一:遍历计数。使用map。如果大于数组长度一半了,就返回这个值。代码:class Solution { public int majorityElement(int[] nums) { // 暴.原创 2021-10-26 23:16:39 · 185 阅读 · 0 评论 -
【Java题解】307. 区域和检索 - 数组可修改
给你一个数组 nums ,请你完成两类查询,其中一类查询要求更新数组下标对应的值,另一类查询要求返回数组中某个范围内元素的总和。实现 NumArray 类:NumArray(int[] nums) 用整数数组 nums 初始化对象void update(int index, int val) 将 nums[index] 的值更新为 val intsumRange(int left, int right) 返回子数组nums[left, right] 的总和(即,nums[left] + num.原创 2021-10-26 19:24:24 · 130 阅读 · 0 评论