剑指offer
文章平均质量分 52
俯仰天地
AI Compiler Leaner
展开
-
剑指 Offer 10- II. 青蛙跳台阶问题
剑指 Offer 10- II. 青蛙跳台阶问题一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。示例 1:输入:n = 2输出:2示例 2:输入:n = 7输出:21示例 3:输入:n = 0输出:1 要求第 nnn阶台阶有几种上法,即 f(n)f(n)f(n),可以分解为,先上到第 n−1n-1n−1阶,然后再上一阶;或原创 2021-11-15 09:56:28 · 196 阅读 · 0 评论 -
剑指 Offer 10- I. 斐波那契数列
剑指 Offer 10- I. 斐波那契数列写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项(即 F(N))。斐波那契数列的定义如下:F(0) = 0, F(1) = 1F(N) = F(N - 1) + F(N - 2), 其中 N > 1.斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。示例 1:输入:n = 2输出:1原创 2021-11-14 14:39:49 · 783 阅读 · 0 评论 -
剑指 Offer 09. 用两个栈实现队列
剑指 Offer 09. 用两个栈实现队列用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )示例 1:输入:["CQueue","appendTail","deleteHead","deleteHead"][[],[3],[],[]]输出:[null,null,3,-1]示例 2:输入:["CQueue","delet原创 2021-11-09 09:44:56 · 76 阅读 · 0 评论 -
剑指 Offer 40. 最小的k个数(利用最大堆和快速排序)
剑指 Offer 40. 最小的k个数输入整数数组 arr ,找出其中最小的 k 个数。例如,输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。示例 1:输入:arr = [3,2,1], k = 2输出:[1,2] 或者 [2,1]示例 2:输入:arr = [0,1,2,1], k = 1输出:[0]方法一:最大堆:需要借助java的PriorityQueue来完成,我们先来简单介绍一下PriorityQueue。PriorityQueue底层的数据原创 2021-10-06 11:24:55 · 143 阅读 · 0 评论 -
剑指 Offer 07. 重建二叉树之递归法
剑指 Offer 07. 重建二叉树输入某二叉树的前序遍历和中序遍历的结果,请构建该二叉树并返回其根节点。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。示例 1:Input: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7]Output: [3,9,20,null,null,15,7]示例 2:Input: preorder = [-1], inorder = [-1]Output: [-1]这道题相信大部分童鞋们都做过,只不原创 2021-11-08 11:57:02 · 69 阅读 · 0 评论 -
剑指 Offer 06. 从尾到头打印链表
剑指 Offer 06. 从尾到头打印链表输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。示例 1:输入:head = [1,3,2]输出:[2,3,1]这个题目只需要借助一个栈就能完成,首先遍历整个链表,将每个节点的值依次压入栈中,最后再将栈中的值依次出栈放入数组,借助栈先入后出的性质很容易实现顺序的反转。下面举例说明:首先将第一个节点的值压栈将第二个节点的值压栈将第三个节点的值压栈将栈顶的值出栈,放入数组将栈顶的值出栈,放入数组将栈顶的值出栈,放入原创 2021-10-02 23:00:23 · 110 阅读 · 0 评论 -
剑指 Offer 04. 二维数组中的查找
剑指 Offer 04. 二维数组中的查找在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。示例:现有矩阵 matrix 如下:[ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6, 9, 16, 22], [10, 13, 14, 17, 24], [18, 21, 23, 26, 30原创 2021-10-02 22:18:16 · 104 阅读 · 0 评论 -
剑指 Offer 32 - III. 从上到下打印二叉树 III
剑指 Offer 32 - III. 从上到下打印二叉树 III请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。例如:给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回其层次遍历结果:[ [3], [20,9], [15,7]]【解析】这次又是在剑指 Offer 32 - II. 从原创 2021-10-02 08:40:19 · 65 阅读 · 0 评论 -
剑指 Offer 32 - II. 从上到下打印二叉树 II
剑指 Offer 32 - II. 从上到下打印二叉树 II难度简单143从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。例如:给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回其层次遍历结果:[ [3], [9,20], [15,7]]提示:节点总数 <= 1000题目的整体思路和剑指 [Offer 32 - I. 从上到下打印二叉树](原创 2021-10-01 22:12:08 · 135 阅读 · 0 评论 -
剑指 Offer 32 - I. 从上到下打印二叉树
剑指 Offer 32 - I. 从上到下打印二叉树从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。例如:给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回:[3,9,20,15,7]层序遍历的时候考虑用队列来存放每一层的节点信息。先将根节点root进栈然后取栈头元素,将其不为null的子节点放入栈中,将栈头元素出栈。当栈为空的时候遍历结束下面距离说明:初始状态:原创 2021-10-01 09:12:51 · 87 阅读 · 0 评论 -
剑指 Offer 24. 反转链表
剑指 Offer 24. 反转链表定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL限制:0 <= 节点个数 <= 5000这个问题,首先考虑采用双指针一前一后从头往后遍历整个列表,依次将每两个节点间的指针反转。但是存在以下问题:问题一:当前面指针的next指向了后面指针后,无法继续向前遍历了,如下图原创 2021-09-30 23:24:18 · 81 阅读 · 0 评论 -
剑指 Offer 05. 替换空格
剑指 Offer 05. 替换空格请实现一个函数,把字符串 s 中的每个空格替换成"%20"。示例 1:输入:s = "We are happy."输出:"We%20are%20happy."限制:0 <= s 的长度 <= 10000这个问题我认为主要的难点在于各种数据结构的转换的api需要记住。另外一个考点就是双指针:一个指向原字符串,一个指向新数组,指向原字符串的指针向后遍历的过程中,如果遇到空格,则向新数组中连续增加三个字符’%’ '2’和 ‘0’;如果不是空格则将原创 2021-09-30 22:49:44 · 75 阅读 · 0 评论 -
剑指 Offer 03. 数组中重复的数字
剑指 Offer 03. 数组中重复的数字找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。示例 1:输入:[2, 3, 1, 0, 2, 5, 3]输出:2 或 3 限制:2 <= n <= 100000这道题,可以用的方法很多,可以遍历数组然后用哈希表存放,每次放之前查看是否重复,但哈希表会占用内存空间。而如果先排序原创 2021-09-29 23:22:50 · 52 阅读 · 0 评论