剑指offer
弥川
手持两把锟斤拷,口中疾呼烫烫烫
展开
-
剑指 Offer II 022. 链表中环的入口节点
题目:给定一个链表,返回链表开始入环的第一个节点。 从链表的头节点开始沿着 next 指针进入环的第一个节点为环的入口节点。如果链表无环,则返回 null。 题解:使用快慢指针确定是否有环,有环时快指针回到链表头,之后两个指针同时移动一步,再次相遇时为入口节点 官方题解 代码 /* struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }原创 2022-04-08 16:48:18 · 1155 阅读 · 0 评论 -
LCOF16 快速幂
链接 lcof16 快速幂 描述 实现函数double Power(double base, int exponent),求base的exponent次方。 分析 十进制正整数n,二进制表示“bm…b3b2b1” 二进制转十进制,n = 1b1 + 2b2 + 4b3 + … + 2(m-1)bm 所以计算每一个二进制位的幂(x1,x2 ,x4,…),将所有位的幂相乘 利用移位操作,每计算一位去掉右边的一个1 幂指数n为负数时,底数x转为1/x,指数取绝对值 代码 class Solution { pu原创 2020-07-01 18:38:14 · 113 阅读 · 0 评论 -
Leecode interview55-II 平衡二叉树
题目链接 Leecode interview55-II 平衡二叉树 题目描述 输入一棵二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。 Definition for a binary tree node. struct TreeNode { int val; TreeNode *left; TreeNode *right; T...原创 2020-04-01 23:40:18 · 83 阅读 · 0 评论 -
Leecode interview37 序列化二叉树
题目链接 Leecode interview37 序列化二叉树 题目描述 请实现两个函数,分别用来序列化和反序列化二叉树 题目分析 序列化:层序遍历,利用队列实现 反序列化:序列化字符串重定向为字符串输入流,从输入流读取节点值存入vector数组,该数组为完全二叉树(空节点为NULL),完全二叉树的下标关系为:父节点 i,左孩子节点 2i,右孩子节点 2i+1。采取快慢指针的方式,慢指针走一步,...原创 2020-04-01 12:38:44 · 68 阅读 · 0 评论 -
Leecode interview26 树的子结构
题目链接 Leecode interview26 题目描述 输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构) B是A的子结构, 即 A中有出现和B相同的结构和节点值。 返回 true,因为 B 与 A 的一个子树拥有相同的结构和节点值。 题目分析 B是A的子结构满足: B是根节点A的子结构,即A->val == B->val; B是根节点A的左子树的子...原创 2020-03-29 21:29:36 · 63 阅读 · 0 评论 -
LeeCode 面试题59 - II. 队列的最大值
题目链接 Leecode 面试题59-2 题目要求: 请定义一个队列并实现函数 max_value 得到队列里的最大值,要求函数max_value、push_back 和 pop_front 的均摊时间复杂度都是O(1)。 若队列为空,pop_front 和 max_value 需要返回 -1 分析: 采取两个队列,一个普通队列保存顺序入队的数,一个双端队列按单调递减保存队列值。 队列不空时,ma...原创 2020-03-16 13:26:08 · 193 阅读 · 0 评论 -
Leecode interview22. 链表中倒数第k个节点 (快慢指针)
题目链接 Leecode interview22 题目描述 输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有6个节点,从头节点开始,它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个节点是值为4的节点。 分析 两个指针,快慢指针,快指针先走k-1步 代码 class Solution { public: ...原创 2020-03-16 21:24:34 · 61 阅读 · 0 评论 -
Leetcode 面试题07 重建二叉树
题目链接 Leecode 面试题07 重建二叉树 题目要求 输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。 例如,给出 前序遍历 preorder = [3,9,20,15,7] 中序遍历 inorder = [9,3,15,20,7] 返回如下的二叉树: 3 / \ 9 20 / \ 1...原创 2020-03-18 12:13:07 · 138 阅读 · 0 评论 -
Leetcode interview28 镜像对称二叉树
题目链接 Leecode interview28 镜像对称二叉树 题目描述 请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。 题目分析 一棵树镜像对称满足: 空树 左右子节点值相等 左右子树对称 代码 class Solution { public: bool isSymmetric(TreeNode* root) { re...原创 2020-04-03 00:25:17 · 80 阅读 · 0 评论 -
Leetcode 6 Z字形变换
题目链接 Leecode 6 Z字形变换 题目要求 将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。 之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,请你实现这个将字符串进行指定行数变换的函数。 分析 观察每一行的字符下标,有以下规律: 每一行第一个字符下标等于行数减一 第一行和最后一行,行中相邻两个字符下标相差为:2*row - 2 中间的行,行中相邻两个字符的下标相差在两个值间周期变化:Gap1,Gap2=2*row-2-Gap1;而且从第一个字符开始,相差从Gap1原创 2020-05-11 23:55:41 · 104 阅读 · 0 评论 -
Leetcode interview4 二维数组中的查找
Leetcode interview4 二维数组中的查找 描述 在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 分析 每行从左到右递增,每列从上到下递增 每列最最小值为第一个元素,每行最大值为最后一个元素 target与右上角元素比较,小于该元素则小于该列元素,大于该元素则大于该行元素 class Solution { public: bool findNum原创 2020-06-12 22:50:09 · 89 阅读 · 0 评论 -
Leetcode interview32-II 层序打印二叉树,分行
Leetcode interview32-II 层序打印二叉树,分行 题目描述 从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。 解法一 每层节点计数,利用队列保存每层节点顺序 /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x)原创 2020-06-16 12:44:16 · 65 阅读 · 0 评论 -
LCOF12 矩阵中的路径
Link LCOF12 矩阵中的路径 Description 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一格开始,每一步可以在矩阵中向左、右、上、下移动一格。如果一条路径经过了矩阵的某一格,那么该路径不能再次进入该格子。 Analyze DFS + 剪枝 搜索下标越界、当前字符不匹配,返回当前搜索结果false 匹配完毕,返回true 替换矩阵中检索到的当前字符,标记已检索,对下一个字符进行检索,检索方向为下、上、右、左 Code class So原创 2020-06-24 23:02:43 · 110 阅读 · 0 评论