
剑指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 · 1200 阅读 · 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 · 160 阅读 · 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 · 126 阅读 · 0 评论 -
Leecode interview37 序列化二叉树
题目链接Leecode interview37 序列化二叉树题目描述请实现两个函数,分别用来序列化和反序列化二叉树题目分析序列化:层序遍历,利用队列实现反序列化:序列化字符串重定向为字符串输入流,从输入流读取节点值存入vector数组,该数组为完全二叉树(空节点为NULL),完全二叉树的下标关系为:父节点i,左孩子节点 2i,右孩子节点2i+1。采取快慢指针的方式,慢指针走一步,...原创 2020-04-01 12:38:44 · 99 阅读 · 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 · 106 阅读 · 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 · 254 阅读 · 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 · 107 阅读 · 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 · 164 阅读 · 0 评论 -
Leetcode interview28 镜像对称二叉树
题目链接Leecode interview28 镜像对称二叉树题目描述请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。题目分析一棵树镜像对称满足:空树左右子节点值相等左右子树对称代码class Solution {public: bool isSymmetric(TreeNode* root) { re...原创 2020-04-03 00:25:17 · 132 阅读 · 0 评论 -
Leetcode 6 Z字形变换
题目链接Leecode 6 Z字形变换题目要求将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,请你实现这个将字符串进行指定行数变换的函数。分析观察每一行的字符下标,有以下规律:每一行第一个字符下标等于行数减一第一行和最后一行,行中相邻两个字符下标相差为:2*row - 2中间的行,行中相邻两个字符的下标相差在两个值间周期变化:Gap1,Gap2=2*row-2-Gap1;而且从第一个字符开始,相差从Gap1原创 2020-05-11 23:55:41 · 136 阅读 · 0 评论 -
Leetcode interview4 二维数组中的查找
Leetcode interview4 二维数组中的查找描述在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。分析每行从左到右递增,每列从上到下递增每列最最小值为第一个元素,每行最大值为最后一个元素target与右上角元素比较,小于该元素则小于该列元素,大于该元素则大于该行元素class Solution {public: bool findNum原创 2020-06-12 22:50:09 · 121 阅读 · 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 · 92 阅读 · 0 评论 -
LCOF12 矩阵中的路径
LinkLCOF12 矩阵中的路径Description请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一格开始,每一步可以在矩阵中向左、右、上、下移动一格。如果一条路径经过了矩阵的某一格,那么该路径不能再次进入该格子。AnalyzeDFS + 剪枝搜索下标越界、当前字符不匹配,返回当前搜索结果false匹配完毕,返回true替换矩阵中检索到的当前字符,标记已检索,对下一个字符进行检索,检索方向为下、上、右、左Codeclass So原创 2020-06-24 23:02:43 · 141 阅读 · 0 评论