剑指offer
小镇攻城狮
吃饭的家伙要拿稳咯
展开
-
剑指offer题目索引
数据结构链表JZ3 从尾到头打印链表JZ14 链表中倒数第k个结点JZ15 反转链表JZ16 合并两个有序的链表数组JZ1 二维数组查找一个特定值JZ6 旋转数组后的最小数字JZ7 斐波那契数列JZ13 调整数组顺序使数组中的奇数位于偶数前面二叉树JZ4 根据前序遍历和中序遍历重建二叉树JZ17 判断是否是子树栈JZ5 用两个栈实现队列位运算JZ11 二进制中1的个数数学运算JZ12 数值的整数次方字符串JZ2 替换空格递归JZ8 跳台阶JZ9 变态跳台阶J原创 2021-03-19 21:16:20 · 172 阅读 · 0 评论 -
【剑指 Offer】68. 二叉树的最近公共祖先
1 二叉搜索树的最近公共祖先解析若 root 是 p,q 的 最近公共祖先 ,则只可能为以下三种情况之一:p 和 q 在 root 的子树中,且分列 root 的 异侧(即分别在左、右子树中);p=root 且 q 在 root 的左或右子树中;q=root 且 p 在root 的左或右子树中;参考代码(Java)public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) { // 最近公共祖原创 2021-06-01 20:09:40 · 1637 阅读 · 0 评论 -
【剑指 Offer】37. 序列化二叉树
原题链接解析通常使用的前序、中序、后序、层序遍历记录的二叉树的信息不完整,即唯一的输出序列可能对应着多种二叉树可能性。题目要求的 序列化 和 反序列化 是 可逆操作 。因此,序列化的字符串应携带 完整的二叉树信息 。参考代码(Java先序遍历)class Codec { // Encodes a tree to a single string. public String serialize(TreeNode root) { if (root == null)原创 2021-06-01 11:36:40 · 2200 阅读 · 0 评论 -
【剑指 Offer】32. 从上到下打印二叉树(BFS)
一共三道题,分别以不同的方式对二叉树进行BFS的遍历。BFS 通常借助队列的先入先出特性来实现。1 原题链接从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。public int[] levelOrder(TreeNode root) { if (root == null) return new int[]{}; List<Integer> list = new ArrayList<>();原创 2021-05-31 22:15:22 · 2252 阅读 · 0 评论 -
【剑指 Offer】59 - II. 队列的最大值
原题链接解析定义一个队列,一个双向队列。队列存储原来的元素;双向队列存储局部最大值参考代码(Java)class MaxQueue { Queue<Integer> q1; Deque<Integer> q2; public MaxQueue() { q1 = new LinkedList<>(); q2 = new LinkedList<>(); } public in原创 2021-05-08 14:59:25 · 770 阅读 · 0 评论 -
【剑指 Offer】30. 包含 min 函数的栈
原题链接解析定义两个栈,一个存储原来的元素,一个存储最小的元素参考代码(Java)class MinStack { Stack<Integer> s1, s2; public MinStack() { s1 = new Stack<>(); s2 = new Stack<>(); } public void push(int x) { s1.push(x); i原创 2021-05-08 14:52:05 · 1127 阅读 · 0 评论 -
【剑指 Offer】09. 用两个栈实现队列
原题链接解析定义两个栈,经过两个栈的 入栈和出栈 ,实现队列 先进先出 的特点参考代码(Java)class CQueue { Stack<Integer> s1; Stack<Integer> s2; public CQueue() { s1 = new Stack<>(); s2 = new Stack<>(); } public void appendTail(int原创 2021-05-08 14:44:24 · 1041 阅读 · 0 评论 -
【剑指 Offer】59 - I. 滑动窗口的最大值
原题链接解析使用暴力解法会超时;创建一个 非严格单调递减 的双端队列,存储窗口中的值,将计算窗口的最大元素的时间复杂度将为O(1)参考代码public int[] maxSlidingWindow(int[] nums, int k) { if (nums.length == 0 || k == 0) return new int[0]; Deque<Integer> deque = new LinkedList<>(); int[原创 2021-05-08 11:25:03 · 1115 阅读 · 0 评论 -
【剑指 Offer】35. 复杂链表的复制
原题链接解析可以使用 哈希表 存储链表的结构参考代码(Java)public Node copyRandomList(Node head) { if (head == null) return null; Node cur = head; Map<Node, Node> map = new HashMap<>(); // 1. 复制各节点,并建立 “原节点 -> 新节点” 的 Map 映射 while (cur原创 2021-05-08 11:16:23 · 1055 阅读 · 0 评论