剑指offer
3D菜鸟张三
所有的焦虑都在于能力不够
展开
-
剑指Offer之从上到下打印二叉树
题目: 从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。 示例: 给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回: [3,9,20,15,7] 题解: 显而易见,使用BFS(广度优先搜索)来遍历二叉树,利用队列的先进先出特性来存储当前遍历节点。...原创 2020-04-29 09:39:05 · 151 阅读 · 0 评论 -
剑指Offer之压入栈弹出序列
题目: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2,1} 是该压栈序列对应的一个弹出序列,但 {4,3,5,1,2} 就不可能是该压栈序列的弹出序列。 即:判断序列是否为栈的弹出可能结果。 示例 1: 输入:pushed = [1...转载 2020-04-29 09:31:33 · 122 阅读 · 0 评论 -
剑指Offer之包含min函数的栈
题目: 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。 示例: MinStack minStack = new MinStack(); minStack.push(-2); minStack.push(0); minStack.push(-3); minStack.min(); ...原创 2020-04-29 09:28:46 · 159 阅读 · 0 评论 -
剑指Offer之顺时针打印矩阵
题目: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。 示例 1: 输入:matrix = [ [1,2,3], [4,5,6], [7,8,9] ] 输出:[1,2,3,6,9,8,7,4,5] 示例 2: 输入:matrix = [ [1,2,3,4], [5...原创 2020-04-28 09:29:43 · 115 阅读 · 0 评论 -
剑指Offer之对称二叉树
题目: 请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。 例如,二叉树[1,2,2,3,4,4,3] 是对称的。 1 / \ 2 2 / \ / \ 3 4 4 3 但是下面这个[1,2,2,null,3,null,3] 则不是镜像对称的: 1 / \ 2 2 ...原创 2020-04-28 09:25:52 · 120 阅读 · 0 评论 -
剑指Offer之二叉树镜像
题目: 请完成一个函数,输入一个二叉树,该函数输出它的镜像。 例如输入: 4 / \ 2 7 / \ / \ 1 3 6 9 镜像输出: 4 / \ 7 2 / \ / \ 9 6 3 1 示例 1: 输入:root = [4,2,7,1,3,6,9] 输出:[4,7,2,9,6...原创 2020-04-27 09:56:35 · 116 阅读 · 0 评论 -
剑指Offer之二叉树的子结构
题目: 输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构) B是A的子结构, 即 A中有出现和B相同的结构和节点值。 例如: 给定的树 A: 3 / \ 4 5 / \ 1 2 给定的树 B: 4 / 1 返回 true,因为 B 与 A 的一个子树拥有相同的结构和节点值。 示例 1:...原创 2020-04-27 09:48:34 · 143 阅读 · 0 评论 -
剑指Offer之合并两个有序链表
题目 将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4 题解 遍历指针,比较节点值大小,合并即可。注意最后剩余节点的处理。 public class ListNode { ...原创 2020-04-27 09:44:38 · 161 阅读 · 0 评论 -
剑指Offer之反转链表
题目: 反转一个单链表。 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 题解: 从前向后依次反转即可,如下所示 第一次:2->1->3->4->5 第二次:3->2->1->4->5 第三次:4->3-&...原创 2020-04-26 10:28:26 · 102 阅读 · 0 评论 -
剑指Offer之链表中的第k个节点
题目: 输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有6个节点,从头节点开始,它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个节点是值为4的节点。 示例: 给定一个链表: 1->2->3->4->5, 和 k = 2. 返回链表 4->5. 题解: ...原创 2020-04-26 10:08:23 · 196 阅读 · 0 评论 -
剑指Offer之调整数组顺序使奇数位于偶数前边
题目: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。 题解: 使用头尾双指针,头指针找出偶数,尾指针找出奇数,然后交换即可。 代码实现 public class Solution { public int[] Exchange(int[] nums) { int i ...原创 2020-04-26 10:05:08 · 118 阅读 · 0 评论 -
剑指Offer之删除链表中的节点
题目: 给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。 示例 1: 输入: head = [4,5,1,9], val = 5 输出: [4,1,9] 解释: 给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后, 该链表应变为 4 -> 1 -> 9. 示例 2: 输入: head = [4,5,...原创 2020-04-24 09:42:09 · 163 阅读 · 0 评论 -
剑指Offer之打印从1到最大的n位数
题目: 输入数字n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。 示例 1: 输入: n = 1 输出: [1,2,3,4,5,6,7,8,9] 题解: 求出最大值,遍历存入即可。 public class Solution { public int[] PrintNumbers(int...原创 2020-04-24 09:36:51 · 167 阅读 · 0 评论 -
剑指Offer之数值的整数次方
题目: 实现函数double Power(double base, int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。 示例 1: 输入: 2.00000, 10 输出: 1024.00000 示例2: 输入: 2.10000, 3 输出: 9.26100 示例3: 输入: 2.00000, -2 输...原创 2020-04-24 09:33:57 · 107 阅读 · 0 评论 -
剑指Offer之二进制中1的个数
题目: 请实现一个函数,输入一个整数,输出该数二进制表示中 1 的个数。例如,把 9表示成二进制是 1001,有 2 位是 1。因此,如果输入 9,则该函数输出 2。 示例 1: 输入:00000000000000000000000000001011 输出:3 解释:输入的二进制串 00000000000000000000000000001011中,共有三位为 '1'。 ...原创 2020-04-23 09:46:48 · 121 阅读 · 0 评论 -
剑指Offer之剪绳子
题目: 给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m、n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]...k[m] 。请问 k[0]*k[1]*...*k[m] 可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。 示例 1: 输入: 2 输出: 1 ...原创 2020-04-23 09:42:38 · 193 阅读 · 0 评论 -
剑指Offer之机器人运动范围
题目: 地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] 。一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左、右、上、下移动一格(不能移动到方格外),也不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格 [35, 37] ,因为3+5+3+7=18。但它不能进入方格 [35, 38],因为3+5+3+8=19。请问该机器...原创 2020-04-22 09:57:18 · 169 阅读 · 1 评论 -
剑指Offer之矩阵中的路径
题目: 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一格开始,每一步可以在矩阵中向左、右、上、下移动一格。如果一条路径经过了矩阵的某一格,那么该路径不能再次进入该格子。例如,在下面的3×4的矩阵中包含一条字符串“bfce”的路径(路径中的字母用加粗标出)。 [["a","b","c","e"], ["s","f","c",...原创 2020-04-22 09:44:36 · 93 阅读 · 0 评论 -
剑指Offer之旋转数组的最小数字
题目: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组[3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。 实例1: 输入:[3,4,5,1,2] 输出:1 实例2: 输入:[2,2,2,0,1] 输出:0 题解: 方法一:...原创 2020-04-21 10:04:40 · 107 阅读 · 0 评论 -
剑指Offer之青蛙跳台阶
题目: 一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n级的台阶总共有多少种跳法。 答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。 注意:当n=0时,result=1; 实例1: 输入:n = 2 输出:2 实例2: 输入:n = 7 输出:21 题解: 通过计算前几项后,发现是变相...原创 2020-04-21 09:50:36 · 144 阅读 · 0 评论 -
剑指Offer之斐波那契数列
题目: 写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项。斐波那契数列的定义如下: F(0) = 0, F(1)= 1 F(N) = F(N - 1) + F(N - 2), 其中 N > 1. 斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。 答案需要取模 1e9+7(1000000007...原创 2020-04-21 09:46:13 · 114 阅读 · 0 评论 -
剑指Offer之用两个栈实现队列
题目: 使用两个栈实现队列,实现插入,删除函数功能。 题解: 一个栈用来插入,另一个栈用来删除元素。当插入元素时,直接插入,当删除元素时,如果删除栈为空,则将插入栈中元素依次出栈存入删除栈(实现反序),然后出栈即可,若删除栈不为空,则直接出栈删除即可。 注意:队列为空时,返回-1; 代码实现 public class CQueue { private Stack<in...原创 2020-04-21 09:42:42 · 121 阅读 · 1 评论 -
剑指Offer之重建二叉树
题目: 输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。 示例: 前序遍历 preorder = [3,9,20,15,7] 中序遍历 inorder = [9,3,15,20,7] 返回如下的二叉树: 3 / \ 9 20 / \ 15 7 题解: 经验总结:二叉树的问题...原创 2020-04-04 11:18:10 · 112 阅读 · 0 评论 -
剑指Offer之从尾到头打印链表
题目: 输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。 示例: 输入:head = [1,3,2] 输出:[2,3,1] 题解: 利用栈的属性,遍历节点,将节点值压入栈中,在将栈中值弹出存入数组即可。 public class ListNode { public int val; public ListNode next; public...原创 2020-04-04 10:08:09 · 107 阅读 · 0 评论 -
剑指Offer之替换数组中的字符
题目描述 请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。 题解: 1.转换为char 数组 进行处理 static string ReplaceSpace(string item) { char[] tempstr = item.ToCharArray(...原创 2020-04-03 10:39:15 · 139 阅读 · 0 评论 -
剑指Offer之二维数组中的查找
题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 示例 { [1,2,8,9], [2,5,8,12], [3,5,7,8], [10,11,12,13] } ...原创 2020-04-03 10:08:52 · 86 阅读 · 0 评论 -
剑指Offer之数组中重复数字
题目: 找出数组中重复的数字。 在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。 示例 1: 输入: [2, 3, 1, 0, 2, 5, 3] 输出:2 或 3 题解: 方法一: 利用字典Dictionary,遍历数组,在将数...原创 2020-04-02 10:22:04 · 124 阅读 · 0 评论