剑指offer
剑指offer刷题笔记,记录刷题,方便回忆
编程小镇
贵有恒何必三更眠五更起,最无益只怕一日曝十日寒。
展开
-
剑指offer系列(61)序列化二叉树
解题思路序列化:利用先序遍历节点,节点为空时,保存#,节点与节点之间用空格隔开。反序列化:将字符串还原成节点保存至队列中,依次取出节点即可。class Solution {public: char* Serialize(TreeNode *root) { if (root == nullptr) return nullptr; string res = serialize(root); char* buffer = new char[res.size() + 1.原创 2021-01-25 09:23:50 · 97 阅读 · 0 评论 -
剑指offer系列(60)把二叉树打印成多行
解题思路:层次遍历class Solution {public: vector<vector<int> > Print(TreeNode* pRoot) { vector<vector<int>> res; queue<TreeNode*> que; if (pRoot == nullptr) return res; .原创 2021-01-19 14:37:34 · 82 阅读 · 0 评论 -
剑指offer系列(59)按之字形顺序打印二叉树
解题思路:层序遍历时,判断当前层数,若为奇数层,则反转当前层的结果,再保存。class Solution {public: vector<vector<int> > Print(TreeNode* pRoot) { vector<vector<int>> res; queue<TreeNode*> que; if (pRoot == nullptr) return res; int level_num = 0;.原创 2021-01-19 12:24:10 · 103 阅读 · 0 评论 -
剑指offer系列(22)从上到下打印二叉树
剑指offer系列(22)从上到下打印二叉树解题思路:依次将每一层节点存放至队列中,队列中的节点个数为该层节点数,依次弹出。在弹出时将其孩子节点依次放至队列,逐层遍历。 class Solution {public: vector<int> PrintFromTopToBottom(TreeNode* root) { vector<int> res; queue<TreeNode*> que; if (root == nullptr) ret原创 2021-01-19 12:02:32 · 84 阅读 · 0 评论 -
剑指offer系列分类汇总(更新ing)
剑指offer系列分类汇总链表动态规划链表JZ-06-从头到尾打印链表JZ-18-删除链表节点JZ-22-链表中倒数第K个节点JZ-23-链表中环的入口节点JZ-24-反转链表JZ-25-合并两个有序链表JZ-52-两个链表的第一个公共节点动态规划JZ-07-斐波那契数列JZ-08-跳台阶JZ-30-连续子数组的最大和JZ-33-丑数JZ-67-剪绳子...原创 2020-12-28 08:18:11 · 317 阅读 · 0 评论 -
剑指offer系列(67)剪绳子
解题思路:动态规划。class Solution {public: int cutRope(int number) { if (number <= 4) return number; vector<int> f(number+1, 0); for (int i = 0; i <=4; i++){ f[i] = i; } for (int i = 5; i <= number; i++){ for (int j = 1; j &l.原创 2020-12-28 08:08:31 · 102 阅读 · 0 评论 -
剑指offer系列(33)丑数
解题思路:动态规划。使用 i, j, k 三个指针,分别记录当前数*2,*3,*5的值,初始时指向第一个丑数,依次将array[0] * 2, array[j]*3,array[k]*5 ,取最小值,则为下一个丑数,然后比较是i, j, k哪个数的倍数,则将索引后移即可。class Solution {public: int GetUglyNumber_Solution(int index) { if (index <= 1) return index; vector&l.原创 2020-12-28 08:06:43 · 128 阅读 · 0 评论 -
剑指offer系列(8)跳台阶
剑指offer系列(8)跳台阶解题思路:动态规划。与斐波那契数列求解相同。class Solution {public: int jumpFloor(int number) { if (number <= 2) return number; int x = 1; int y = 2; for (int i = 3; i <= number; i++){ int cur = x + y; x = y; y = cur; } return原创 2020-12-27 20:09:17 · 94 阅读 · 0 评论 -
剑指offer系列(7)斐波那契数列
剑指offer系列(7)斐波那契数列大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0,第1项是1)。n≤39示例1输入4返回值3解题思路: ...原创 2020-12-27 20:02:35 · 78 阅读 · 0 评论 -
剑指offer系列(30)连续子数组的最大和
剑指offer系列(30)连续子数组的最大和解题思路:动态规划。 注意到题目有两个要求:1. 连续子数组 2. 和最大。 通过遍历数组,使用变量sum记录累加元素和,变量 ans 记录全局最大子序和。当sum小于0时,则以该数结束,计算下一个子数组的和,每次累加一个数,判断是否比ans大,更新 ans 。代码如下class Solution{public: int FindGreatestSumOfSubArray(vector<int> array){ if (ar原创 2020-12-27 19:44:15 · 82 阅读 · 0 评论 -
剑指offer系列(37)序列化二叉树
序列化与反序列化请实现两个函数,分别用来序列化和反序列化二叉树。示例:你可以将以下二叉树: 1 / 2 3 / \4 5序列化为 “[1,2,3,null,null,4,5]”来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/xu-lie-hua-er-cha-shu-lcof著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 二叉树序列化可以通过同的遍历原创 2020-12-08 13:13:35 · 85 阅读 · 1 评论 -
剑指offer系列(25)合并两个排序的链表
剑指offer系列(25)合并两个排序的链表输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。示例1:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/he-bing-liang-ge-pai-xu-de-lian-biao-lcof著作权归领扣网络所有。商业转载请联系官方授权,非商业原创 2020-12-03 13:27:21 · 99 阅读 · 0 评论 -
剑指offer系列(24)反转链表
剑指offer系列(24)反转链表定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL限制:0 <= 节点个数 <= 5000来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/fan-zhuan-lian-biao-lcof著作权归领扣网络所有。原创 2020-12-03 13:00:17 · 86 阅读 · 0 评论 -
剑指offer系列(23)链表中环的入口节点
剑指offer系列(23)链表中环的入口节点给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意,pos 仅仅是用于标识环的情况,并不会作为参数传递到函数中。说明:不允许修改给定的链表。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/linked-list-cycl原创 2020-12-03 12:55:09 · 126 阅读 · 0 评论 -
剑指offer系列(22)链表中倒数第K个节点
剑指offer系列(22)链表中倒数第K个节点 输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有6个节点,从头节点开始,它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个节点是值为4的节点。示例:给定一个链表: 1->2->3->4->5, 和 k = 2.返回链表 4->5.来源:力扣(LeetCode)链接:https://leetcode-cn.com/prob原创 2020-12-03 12:32:25 · 77 阅读 · 0 评论 -
剑指offer系列(18)删除链表节点
剑指offer(18)删除链表节点给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。示例 1:输入: head = [4,5,1,9], val = 5输出: [4,1,9]解释: 给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.示例 2:输入: head = [4,5,1,9], val = 1输出: [4,5,9]解释: 给定你链表中值为 1 的第三个节点,那么在调用了你原创 2020-12-03 12:13:17 · 91 阅读 · 0 评论 -
剑指offer系列(06)从尾到头打印链表
剑指offer系列(06)从尾到头打印链表问题描述输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。示例 1:输入:head = [1,3,2]输出:[2,3,1]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/cong-wei-dao-tou-da-yin-lian-biao-lcof著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。本题考察链表的基本操作,链表反转操作。思路:将链表反原创 2020-12-03 08:11:34 · 120 阅读 · 0 评论 -
剑指offer系列(52)两个链表的第一个公共节点
剑指offer系列之链表相交法一:set 去重法法二:双指针法输入两个链表,找出它们的第一个公共节点。如下面的两个链表:在节点 c1 开始相交。示例 1:输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3输出:Reference of the node with value = 8输入解释:相交节点的值为 8 (注意,如果两个列表相交则不能为 0)。从各自的表头开始原创 2020-12-01 22:22:34 · 105 阅读 · 0 评论