剑指Offer题解。
数组中重复的数字
1 | 找出数组中重复的数字。 |
1 | class Solution{ |
1 | class Solution{ |
不修改数组找出重复的数字
1 | 给定一个长度为 n+1 的数组nums,数组中所有的数均在 1∼n 的范围内,其中 n≥1。 |
1 | class Solution{ |
二维数组中的查找
1 | 在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 |
1 | class Solution{ |
替换空格
1 | 请实现一个函数,把字符串 s 中的每个空格替换成"%20"。 |
1 | class Solution{ |
从头到尾打印链表
1 | 输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。 |
1 | class Solution{ |
重建二叉树
1 | 输入某二叉树的前序遍历和中序遍历的结果,请构建该二叉树并返回其根节点。 |
1 | class Solution{ |
二叉树的下一个节点
1 | 给定一棵二叉树的其中一个节点,请找出中序遍历序列的下一个节点。 |
1 | class Solution{ |
用两个栈实现队列
1 | 用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 ) |
1 | class CQueue { |
斐波那契数列
1 | 输入一个整数 n ,求斐波那契数列的第 n 项。 |
1 | class Solution{ |
旋转数组的最小数字
1 | 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 |
1 | class Solution{ |
矩阵中的路径
1 | 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。 |
1 | class Solution{ |
机器人的运动范围
1 | 地上有一个 m 行和 n 列的方格,横纵坐标范围分别是 0∼m−1 和 0∼n−1。 |
1 | class Solution{ |
剪绳子
1 | 给你一根长度为 n 绳子,请把绳子剪成 m 段(m、n 都是整数,2≤n≤58 并且 m≥2)。 |
1 | class Solution{ |
二进制中1的个数
1 | 输入一个 32 位整数,输出该数二进制表示中 1 的个数。 |
1 | public int NumberOf1(int n){ |
数值的整数次方
1 | 实现函数double Power(double base, int exponent),求base的 exponent次方。 |
1 | class Solution{ |
在O(1)时间删除链表结点
1 | 给定单向链表的一个节点指针,定义一个函数在O(1)时间删除该结点。 |
1 | class Solution{ |
删除链表中的重复节点
1 | 在一个排序的链表中,存在重复的节点,请删除该链表中重复的节点,重复的节点不保留。 |
1 | class Solution{ |
调整数组顺序使奇数位于偶数前面
1 | 输入一个整数数组,实现一个函数来调整该数组中数字的顺序。 |
1 | class Solution{ |
链表中倒数第K个节点
1 | 输入一个链表,输出该链表中倒数第 k 个结点。 |
1 | class Solution{ |
链表中环的入口结点
1 | 给定一个链表,若其中包含环,则输出环的入口节点。 |
1 | class Solution{ |
反转链表
1 | 定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。 |
1 | class Solution{ |
1 | class Solution{ |
合并两个排序的链表
1 | 输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按照递增排序的。 |
1 | class Solution{ |
树的子结构
1 | 输入两棵二叉树 A,B,判断 B 是不是 A 的子结构。 |
1 | class Solution{ |
二叉树的镜像
1 | 输入一个二叉树,将它变换为它的镜像。 |
1 | class Solution{ |
对称的二叉树
1 | 请实现一个函数,用来判断一棵二叉树是不是对称的。 |
1 | class Solution{ |
顺时针打印矩阵
1 | 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。 |
1 | class Solution{ |
包含Min函数的栈
1 | 设计一个支持push,pop,top等操作并且可以在O(1)时间内检索出最小元素的堆栈。 |
1 | class MinStack{ |
栈的压入、弹出序列
1 | 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。 |
1 | class Solution{ |
不分行从上往下打印二叉树
1 | 从上往下打印出二叉树的每个结点,同一层的结点按照从左到右的顺序打印。 |
1 | class Solution{ |
分行从上往下打印二叉树
1 | 从上到下按层打印二叉树,同一层的结点按从左到右的顺序打印,每一层打印到一行。 |
1 | class Solution{ |
之字形打印二叉树
1 | 请实现一个函数按照之字形顺序从上向下打印二叉树。 |
1 | 输入如下图所示二叉树[8, 12, 2, null, null, 6, 4, null, null, null, null] |
1 | class Solution{ |
二叉搜索树的后序遍历序列
1 | 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。 |
1 | class Solution{ |
二叉树中和为某一值的路径
1 | 输入一棵二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。 |
1 | class Solution{ |
复杂链表的复刻
1 | 请实现一个函数可以复制一个复杂链表。 |
1 | class Solution{ |
二叉搜索树与双向链表
1 | 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。 |
1 | class Sulotion{ |
序列化二叉树
1 | 请实现两个函数,分别用来序列化和反序列化二叉树。 |
1 | class Solution{ |
数字排列
1 | 输入一组数字(可能包含重复数字),输出其所有的排列方式。 |
1 | class Slolution{ |
数组中出现次数超过一半的数字
1 | 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。 |
1 | class Solution{ |
最小的K个数
1 | 输入 n 个整数,找出其中最小的 k 个数。 |
1 | class Solution{ |
数据流中的中位数
1 | 如何得到一个数据流中的中位数? |
1 | class Solution{ |