剑指Offer
leetcode剑指Offer题目
西土城fe
这个作者很懒,什么都没留下…
展开
-
Java寻找重复的子树leetcode_652
给定一棵二叉树 root,返回所有重复的子树。对于同一类的重复子树,你只需要返回其中任意一棵的根结点即可。如果两棵树具有相同的结构和相同的结点值,则它们是重复的。执行用时:20 ms, 在所有 Java 提交中击败了82.30%的用户内存消耗:45.6 MB, 在所有 Java 提交中击败了70.48%的用户通过测试用例:176 / 176...原创 2022-07-22 20:35:00 · 146 阅读 · 0 评论 -
Java删除有序数组中的重复项
给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。由于在某些语言中不能改变数组的长度,所以必须将结果放在数组nums的第一部分。更规范地说,如果在删除重复项之后有 k 个元素,那么 nums 的前 k 个元素应该保存最终结果。将最终结果插入 nums 的前 k 个位置后返回 k 。不要使用额外的空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。执行用时:1 ms, 在原创 2022-07-13 20:54:52 · 468 阅读 · 0 评论 -
Java二叉树的最近公共祖先
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”执行用时:6 ms, 在所有 Java 提交中击败了100.00%的用户内存消耗:41.8 MB, 在所有 Java 提交中击败了30.93%的用户通过测试用例:31 / 31...原创 2022-07-12 19:27:35 · 167 阅读 · 0 评论 -
Java最小的k个数
输入整数数组 ,找出其中最小的 个数。例如,输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。执行用时:2 ms, 在所有 Java 提交中击败了92.14%的用户内存消耗:41.9 MB, 在所有 Java 提交中击败了78.37%的用户通过测试用例:39 / 39...原创 2022-07-12 19:26:10 · 266 阅读 · 0 评论 -
Java二叉树的最近公共祖先
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”执行用时:6 ms, 在所有 Java 提交中击败了100.00%的用户内存消耗:41.8 MB, 在所有 Java 提交中击败了30.93%的用户通过测试用例:31 / 31.........原创 2022-07-13 20:55:09 · 430 阅读 · 0 评论 -
Java二叉搜索树的最近公共祖先
给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。执行用时:5 ms, 在所有 Java 提交中击败了100.00%的用户内存消耗:42.7 MB, 在所有 Java 提交中击败了12.14%的用户通过测试用例:27 / 27...原创 2022-07-10 21:14:13 · 131 阅读 · 0 评论 -
Java把字符串转换成整数
写一个函数 StrToInt,实现把字符串转换成整数这个功能。不能使用 atoi 或者其他类似的库函数。首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。该字符串除了有效的整数部分之后也可能会存在多余的字符,这些字符可以被忽略,它们对于函数不应该造成影响。注意:假如该字符串中的第一个非空格字符不原创 2022-07-10 20:43:58 · 3741 阅读 · 0 评论 -
Java构建乘积数组
给定一个数组 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 ms, 在所有 Java 提交中击败了100.00%的用户内存消耗:52.6 MB, 在所有 Java 提交中击败了13.11%的用户通过测试用例:44 / 44...原创 2022-07-10 20:14:04 · 95 阅读 · 0 评论 -
Java不用加减乘除做加法
写一个函数,求两个整数之和,要求在函数体内不得使用 “+”、“-”、“*”、“/” 四则运算符号。执行用时:0 ms, 在所有 Java 提交中击败了100.00%的用户内存消耗:38.4 MB, 在所有 Java 提交中击败了24.12%的用户通过测试用例:51 / 51...原创 2022-07-10 20:03:29 · 83 阅读 · 0 评论 -
Java求1+2+…+n
求 ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。执行用时:1 ms, 在所有 Java 提交中击败了19.88%的用户内存消耗:38.5 MB, 在所有 Java 提交中击败了10.01%的用户通过测试用例:35 / 35...原创 2022-07-10 19:47:28 · 617 阅读 · 0 评论 -
Java股票的最大利润
假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少? 执行用时:0 ms, 在所有 Java 提交中击败了100.00%的用户内存消耗:41.2 MB, 在所有 Java 提交中击败了62.25%的用户通过测试用例:200 / 200......原创 2022-07-10 19:48:27 · 230 阅读 · 0 评论 -
Java圆圈中最后剩下的数字
0,1,···,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字(删除后从下一个数字开始计数)。求出这个圆圈里剩下的最后一个数字。 例如,0、1、2、3、4这5个数字组成一个圆圈,从数字0开始每次删除第3个数字,则删除的前4个数字依次是2、0、4、1,因此最后剩下的数字是3。1、执行用时:1110 ms, 在所有 Java 提交中击败了5.20%的用户内存消耗:43.7 MB, 在所有 Java 提交中击败了7.73%的用户通过测试用例:36 / 362、...原创 2022-07-10 16:26:13 · 212 阅读 · 0 评论 -
Java扑克牌中的顺子
从若干副扑克牌中随机抽 5 张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1,J为11,Q为12,K为13,而大、小王为 0 ,可以看成任意数字。A 不能视为 14。执行用时:0 ms, 在所有 Java 提交中击败了100.00%的用户内存消耗:39.4 MB, 在所有 Java 提交中击败了5.26%的用户通过测试用例:203 / 203...原创 2022-07-10 15:37:55 · 423 阅读 · 0 评论 -
Java n个骰子的点数
把n个骰子扔在地上,所有骰子朝上一面的点数之和为s。输入n,打印出s的所有可能的值出现的概率。 你需要用一个浮点数数组返回答案,其中第 i 个元素代表这 n 个骰子所能掷出的点数集合中第 i 小的那个的概率。执行用时:0 ms, 在所有 Java 提交中击败了100.00%的用户内存消耗:42.3 MB, 在所有 Java 提交中击败了5.13%的用户通过测试用例:11 / 11...原创 2022-07-10 15:25:18 · 152 阅读 · 0 评论 -
Java队列的最大值
请定义一个队列并实现函数 max_value 得到队列里的最大值,要求函数max_value、push_back 和 pop_front 的均摊时间复杂度都是O(1)。 若队列为空,pop_front 和 max_value 需要返回 -1执行用时:26 ms, 在所有 Java 提交中击败了62.17%的用户内存消耗:49.1 MB, 在所有 Java 提交中击败了53.22%的用户通过测试用例:34 / 34...原创 2022-07-10 14:50:03 · 414 阅读 · 0 评论 -
Java滑动窗口的最大值
给定一个数组 和滑动窗口的大小 ,请找出所有滑动窗口里的最大值。执行用时:11 ms, 在所有 Java 提交中击败了74.01%的用户内存消耗:50.2 MB, 在所有 Java 提交中击败了47.12%的用户通过测试用例:18 / 18...原创 2022-07-09 22:00:21 · 192 阅读 · 0 评论 -
Java左旋字符串
字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。执行用时:0 ms, 在所有 Java 提交中击败了100.00%的用户内存消耗:41.4 MB, 在所有 Java 提交中击败了33.59%的用户通过测试用例:34 / 34...原创 2022-07-09 20:34:25 · 342 阅读 · 0 评论 -
Java翻转单词顺序
输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串"I am a student. ",则输出"student. a am I"。.trim() 去除首尾空格执行用时:1 ms, 在所有 Java 提交中击败了100.00%的用户内存消耗:41.5 MB, 在所有 Java 提交中击败了32.78%的用户通过测试用例:25 / 25...原创 2022-07-09 20:31:17 · 624 阅读 · 0 评论 -
Java和为s的连续正数序列
输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。执行用时:2 ms, 在所有 Java 提交中击败了94.72%的用户内存消耗:39.5 MB, 在所有 Java 提交中击败了41.27%的用户通过测试用例:32 / 32...原创 2022-07-09 20:12:34 · 150 阅读 · 0 评论 -
Java和为s的两个数字
输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,则输出任意一对即可。 执行用时:1 ms, 在所有 Java 提交中击败了99.84%的用户内存消耗:59.9 MB, 在所有 Java 提交中击败了66.23%的用户通过测试用例:36 / 36...原创 2022-07-09 19:57:34 · 108 阅读 · 0 评论 -
Java数组中数字出现的次数 II
在一个数组 中除一个数字只出现一次之外,其他数字都出现了三次。请找出那个只出现一次的数字。执行用时:3 ms, 在所有 Java 提交中击败了83.93%的用户内存消耗:43.1 MB, 在所有 Java 提交中击败了5.11%的用户通过测试用例:32 / 32...原创 2022-07-08 21:59:48 · 243 阅读 · 0 评论 -
Java数组中数字出现的次数
一个整型数组 里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。执行用时:1 ms, 在所有 Java 提交中击败了100.00%的用户内存消耗:43 MB, 在所有 Java 提交中击败了39.56%的用户通过测试用例:35 / 35...原创 2022-07-08 21:41:49 · 1057 阅读 · 0 评论 -
Java判断平衡二叉树
输入一棵二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树.执行用时:1 ms, 在所有 Java 提交中击败了56.41%的用户内存消耗:41.3 MB, 在所有 Java 提交中击败了16.34%的用户通过测试用例:227 / 227......原创 2022-07-08 20:58:40 · 855 阅读 · 0 评论 -
Java二叉搜索树的第k大节点
给定一棵二叉搜索树,请找出其中第 大的节点的值。 搜索二叉树的中序遍历为从小到大的值,反过来就是从大到小(右——根——左);执行用时:0 ms, 在所有 Java 提交中击败了100.00%的用户内存消耗:41 MB, 在所有 Java 提交中击败了74.16%的用户通过测试用例:91 / 91...原创 2022-07-08 20:37:16 · 134 阅读 · 0 评论 -
Java 0~n-1中缺失的数字
一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。执行用时:0 ms, 在所有 Java 提交中击败了100.00%的用户内存消耗:42.4 MB, 在所有 Java 提交中击败了9.86%的用户通过测试用例:122 / 122...原创 2022-07-08 20:29:49 · 240 阅读 · 0 评论 -
Java在排序数组中查找数字 I
统计一个数字在排序数组中出现的次数。执行用时:0 ms, 在所有 Java 提交中击败了100.00%的用户内存消耗:44.4 MB, 在所有 Java 提交中击败了34.84%的用户通过测试用例:88 / 88原创 2022-07-08 20:19:28 · 124 阅读 · 0 评论 -
Java数组中的逆序对
在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。执行用时:33 ms, 在所有 Java 提交中击败了36.91%的用户内存消耗:49.2 MB, 在所有 Java 提交中击败了46.05%的用户通过测试用例:139 / 139...原创 2022-07-07 21:43:20 · 733 阅读 · 0 评论 -
Java第一个只出现一次的字符
在字符串 s 中找出第一个只出现一次的字符。如果没有,返回一个单空格。 s 只包含小写字母。map.containsKey("key");map.containsValue(1);执行用时:20 ms, 在所有 Java 提交中击败了66.33%的用户内存消耗:41.7 MB, 在所有 Java 提交中击败了67.63%的用户通过测试用例:105 / 105......原创 2022-07-07 20:30:41 · 222 阅读 · 0 评论 -
Java丑数
我们把只包含质因子 2、3 和 5 的数称作丑数(Ugly Number)。求按从小到大的顺序的第 n 个丑数。执行用时:2 ms, 在所有 Java 提交中击败了98.35%的用户内存消耗:40 MB, 在所有 Java 提交中击败了27.50%的用户通过测试用例:596 / 596...原创 2022-07-07 20:19:16 · 580 阅读 · 0 评论 -
Java最长不含重复字符的子字符串
请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。执行用时:4 ms, 在所有 Java 提交中击败了91.57%的用户内存消耗:41.1 MB, 在所有 Java 提交中击败了89.64%的用户通过测试用例:987 / 987...原创 2022-07-06 22:05:16 · 212 阅读 · 0 评论 -
Java礼物的最大价值
在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物?执行用时:2 ms, 在所有 Java 提交中击败了97.98%的用户内存消耗:44.3 MB, 在所有 Java 提交中击败了5.08%的用户通过测试用例:61 / 61...原创 2022-07-06 21:44:44 · 170 阅读 · 0 评论 -
Java把数字翻译成字符串
给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。执行用时:0 ms, 在所有 Java 提交中击败了100.00%的用户内存消耗:38.5 MB, 在所有 Java 提交中击败了16.74%的用户通过测试用例:49 / 49......原创 2022-07-06 21:44:56 · 207 阅读 · 0 评论 -
Java把数组排成最小的数
输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。执行用时:4 ms, 在所有 Java 提交中击败了96.99%的用户内存消耗:41.2 MB, 在所有 Java 提交中击败了31.64%的用户通过测试用例:222 / 222...原创 2022-07-06 21:01:53 · 170 阅读 · 0 评论 -
Java 数字序列中某一位的数字
数字以0123456789101112131415…的格式序列化到一个字符序列中。在这个序列中,第5位(从下标0开始计数)是5,第13位是1,第19位是4,等等。请写一个函数,求任意第n位对应的数字。执行用时:0 ms, 在所有 Java 提交中击败了100.00%的用户内存消耗:38.2 MB, 在所有 Java 提交中击败了57.70%的用户通过测试用例:70 / 70...原创 2022-07-06 20:22:07 · 137 阅读 · 0 评论 -
Java数据流中的中位数
如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。例如,[2,3,4] 的中位数是 3[2,3] 的中位数是 (2 + 3) / 2 = 2.5设计一个支持以下两种操作的数据结构:void addNum(int num) - 从数据流中添加一个整数到数据结构中。double findMedian() - 返回目前所有元素的中位数。执行用时:67 ms, 在所有 Ja原创 2022-07-05 21:06:33 · 300 阅读 · 0 评论 -
Java数组中出现次数超过一半的数字
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。你可以假设数组是非空的,并且给定的数组总是存在多数元素。执行用时:1 ms, 在所有 Java 提交中击败了99.94%的用户内存消耗:44.7 MB, 在所有 Java 提交中击败了70.52%的用户通过测试用例:45 / 45...原创 2022-07-05 20:52:05 · 155 阅读 · 0 评论 -
Java字符串的排列
输入一个字符串,打印出该字符串中字符的所有排列。你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。执行用时:6 ms, 在所有 Java 提交中击败了97.39%的用户内存消耗:45.7 MB, 在所有 Java 提交中击败了92.51%的用户通过测试用例:52 / 52...原创 2022-07-05 20:30:31 · 119 阅读 · 0 评论 -
Java二叉树的序列化与反序列化
请实现两个函数,分别用来序列化和反序列化二叉树。 你需要设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。执行用时:19 ms, 在所有 Java 提交中击败了55.68%的用户内存消耗:43.7 MB, 在所有 Java 提交中击败了48.64%的用户通过测试用例:48 / 48...原创 2022-07-05 16:46:31 · 279 阅读 · 0 评论 -
Java二叉搜索树与双向链表
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。执行用时:0 ms, 在所有 Java 提交中击败了100.00%的用户内存消耗:41.2 MB, 在所有 Java 提交中击败了5.10%的用户通过测试用例:50 / 50...原创 2022-07-05 16:12:52 · 399 阅读 · 0 评论 -
Java复杂链表的复制
请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意节点或者 null。执行用时:0 ms, 在所有 Java 提交中击败了100.00%的用户内存消耗:41 MB, 在所有 Java 提交中击败了45.14%的用户通过测试用例:18 / 18...原创 2022-07-05 15:38:07 · 256 阅读 · 0 评论