- 博客(348)
- 资源 (2)
- 收藏
- 关注
原创 【面试题59 - II. 队列的最大值】(普通队列)
刚开始用了优先队列PriorityQueue,在一组测试样例中过不了,输出总是[], [], [], [], [], [], [], 16, [], 22,正确答案应该是[], [], [], [], [], [], [], 96, [], 16。经过调试,终于想起了,这是优先队列,默认将队列按照升序排列,而此题应该使用普通队列。
2022-11-06 20:51:56
249
原创 【面试题13. 机器人的运动范围】(回溯)
这道题说的不清楚,其实包含一个隐含条件:不可达的方格相当于障碍物,不能通过不可达的方格到达别的符合条件的方格。如这个图中,上面那块符合条件的方格是可达的,但是无法到达下面符合条件的区域。
2022-11-06 16:44:07
200
原创 【剑指 Offer 68 - I. 二叉搜索树的最近公共祖先】
如果节点c为目标节点之一,且c.right及其子树中包含另一个目标节点,那么c是最近公共祖先;如果节点c为目标节点之一,且c.left及其子树中包含另一个目标节点,那么c是最近公共祖先;如果c的左右子树中都包含目标节点,那么c是最近公共祖先。
2022-11-06 15:34:19
142
原创 【剑指 Offer 61. 扑克牌中的顺子】
先对数组进行排序,计算0的个数为cnt0。从非0数开始计算,如果有两个相邻的数相等,必然不能构成顺子;如果相邻的两个数相差不为1,累加缺少的排的数量diffe。如果diffe为0,意味着不缺少排,或者cnt0>diffe,即0牌的数大于缺少的数量,则返回TRUE。
2022-10-30 15:26:42
259
原创 【剑指 Offer 60. n个骰子的点数】(深搜 / 动态规划)
首先想到用深搜穷举所有可能的组合,然后计算每个点数出现的概率。(我好喜欢用深搜,然而好几次深搜只能通过部分测试样例,要快速排序才能完全解决问题)
2022-10-30 11:14:00
105
原创 【剑指 Offer 57 - II. 和为s的连续正数序列】(list转int[])
设置两个指针i,j < target,如果i,j之间的数字之和等于target则加入该数据。
2022-10-25 18:52:38
87
原创 【剑指 Offer 57. 和为s的两个数字】
设置两个指针i,j,分别指向数组左右两端,如果nums[i] + nums[j] > target,j指针向左移动;反之i指针向右移动,直到 nums[i] + nums[j] = target。
2022-10-22 14:33:27
90
原创 【剑指 Offer 55 - II. 平衡二叉树】
一个节点的左右节点都是平衡二叉树,且左右节点的深度差不大于1,这个节点开始的树即为平衡二叉树。如果一个二叉树的每个节点开始的树都是平衡二叉树,这棵树就是平衡二叉树。
2022-10-22 12:38:23
86
原创 【剑指 Offer 50. 第一个只出现一次的字符】
在alist中存放第一次出现的字符,在blist中存放出现大于一次的字符。最后返回alist中第一个字符即可。第一次使用HashMap存放出现一次的字符,调试发现在HashMap中,Key并不是按照存放先后顺序存储的,无法判断哪个是最先出现的。
2022-10-18 20:14:32
71
原创 【剑指 Offer 48. 最长不含重复字符的子字符串】
对每一个位置的字符,向前查询不重复的最大长度,并记录。最后比较得到全局最大不重复字符长度。
2022-10-17 19:02:29
45
原创 【剑指 Offer 47. 礼物的最大价值】(动态规划 / 深度优先搜索)
要想提高运行效率,想到了使用动态规划。即每一个位置的最大值,等于它上边和左边中最大的数,再加上它的值。为了方便计算,构造maxValue[m+1][n+1], 其中maxValue[i][j]对应grid[i-1][j-1]。通过了部分测试用例,超出时间限制。
2022-10-17 18:43:51
97
原创 【剑指 Offer 46. 把数字翻译成字符串】(深度优先搜索)
能翻译成字母的数字只能是0~25,如果当前数字和下一个数字组合小于26,那么它们可以按照两个字母翻译,也可以按照一个字母翻译。
2022-10-16 19:15:51
109
原创 【剑指 Offer 45. 把数组排成最小的数】(String按照字典序比较大小)
将int[ ]数组转为String[ ]数组,再将String数组按照组合的字典序排序。
2022-10-16 17:10:24
89
原创 【剑指 Offer 43. 1~n 整数中 1 出现的次数】(算法)
首先想到的是,将从1到n的数,每一个都转为字符串,数出其中1的个数,但是在测试用例:824883294中超出时间限制。
2022-10-11 19:58:24
94
原创 【剑指 Offer 41. 数据流中的中位数】(ArrayList数组排序)
设置一个动态数组,可以随时插入新的值。对数组进行排序后,可以计算中位数。
2022-10-09 19:58:30
119
原创 【剑指 Offer 40. 最小的k个数】
新建一个长度为k的数组ans,将数组arr的前k个数字加入到ans中。后面没遍历arr中的一个数字,找到当前ans中最大的数字,如果arr[i]小于ans中最大的数字,则替换掉。最终ans中的k个数字即为arr中最小的k各数。
2022-10-09 19:43:20
65
原创 【剑指 Offer 39. 数组中出现次数超过一半的数字】(HashMap)
统计数组中所有数字出现的次数,在所有数字中找到出现次数大于数组长度一半的数字。
2022-10-09 19:29:02
70
原创 【剑指 Offer 37. 序列化二叉树】(字符串分割 / 深搜 / List移除元素)
【代码】【剑指 Offer 37. 序列化二叉树】(字符串分割 / 深搜 / List移除元素)
2022-10-08 20:04:38
68
原创 【剑指 Offer 36. 二叉搜索树与双向链表】
首先对二叉树中的节点进行中序遍历,将节点的数据存储在顺序列表list中。然后将顺序列表中的数据按照单向链表的形式组织起来,最后将单向链表连接为双向链表。
2022-10-08 19:26:17
150
原创 【剑指 Offer 34. 二叉树中和为某一值的路径】(深度优先搜索)
刚开始的代码中,直接使用ans.add(list),运行结果是错误的。单步调试发现在list递归回上一层以后,删掉list末尾的节点,ans中添加的list也随之删掉末尾的节点。这是因为list、newlist,以及ans中的list均指向同一片内存。为了解决这个问题,在添加的时候,每次都要new一个新的list。使用深搜的方法,查找到叶节点(左子树、右子树都为空),判断此时路径上各个节点的和是否等于target,如果等于,将路径(list)加入到ans中。
2022-09-30 15:44:54
161
WindowsFormsApp_library.rar
2020-05-04
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人