剑指offer
WangXu__
这个作者很懒,什么都没留下…
展开
-
剑指offer27 二叉树的镜像
剑指offer27-AcWing-38. 二叉树的镜像输入一个二叉树,将它变换为它的镜像。样例输入树: 8 / \ 6 10 / \ / \ 5 7 9 11[8,6,10,5,7,9,11,null,null,null,null,null,null,null,null]输出树: 8 / \ 10 6 /...原创 2019-06-03 19:00:15 · 135 阅读 · 0 评论 -
剑指offer52 两个链表的第一个公共结点
剑指offer52-AcWing-66. 两个链表的第一个公共结点输入两个链表,找出它们的第一个公共结点。当不存在公共节点时,返回空节点。样例给出两个链表如下所示:A: a1 → a2 ↘ c1 → c2 → c3 ↗ B: ...原创 2019-06-27 21:43:37 · 125 阅读 · 0 评论 -
剑指offer38 数字排列
剑指offer38-AcWing-51. 数字排列输入一组数字(可能包含重复数字),输出其所有的排列方式。样例输入:[1,2,3]输出: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ]思路:C++ code:class Solution {public:...原创 2019-06-24 21:59:10 · 472 阅读 · 0 评论 -
20190627-剑指offer51-AcWing-65. 数组中的逆序对
剑指offer51-AcWing-65. 数组中的逆序对在数组中的两个数字如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。样例输入:[1,2,3,4,5,6,0]输出:6思路1: 归并排序的思想,在归并排序的过程中,计算逆序对的个数.用空间换时间的方法,时间复杂度为O(nlogn)...原创 2019-06-27 21:24:41 · 154 阅读 · 0 评论 -
20190627-剑指offer50.2-AcWing-64. 字符流中第一个只出现一次的字符
剑指offer50.2-AcWing-64. 字符流中第一个只出现一次的字符请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符”go”时,第一个只出现一次的字符是’g’。当从该字符流中读出前六个字符”google”时,第一个只出现一次的字符是’l’。如果当前字符流没有存在出现一次的字符,返回#字符。样例输入:"google"输出:"ggg#ll"...原创 2019-06-27 18:48:51 · 204 阅读 · 0 评论 -
剑指offer50.1 字符串中第一个只出现一次的字符
剑指offer50-AcWing-63. 字符串中第一个只出现一次的字符在字符串中找出第一个只出现一次的字符。如输入"abaccdeff",则输出b。如果字符串中不存在只出现一次的字符,返回#字符。样例:输入:"abaccdeff"输出:'b'思路: 两次for循环,第一次记录每个字符出现的次数,第二次for循环返回第一个出现一次的字...原创 2019-06-27 17:22:13 · 134 阅读 · 0 评论 -
20190627-剑指offer46-AcWing-59. 把数字翻译成字符串
剑指offer46-AcWing-59. 把数字翻译成字符串给定一个数字,我们按照如下规则把它翻译为字符串:0翻译成”a”,1翻译成”b”,……,11翻译成”l”,……,25翻译成”z”。一个数字可能有多个翻译。例如12258有5种不同的翻译,它们分别是”bccfi”、”bwfi”、”bczi”、”mcfi”和”mzi”。请编程实现一个函数用来计算一个数字有多少种不同的翻译方法。样例输...原创 2019-06-27 11:58:55 · 143 阅读 · 0 评论 -
剑指offer49 丑数
剑指offer49-AcWing-62. 丑数我们把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。求第n个丑数的值。样例输入:5输出:5注意:习惯上我们把1当做第一个丑数。思路1: 用空间换时间的方法,按大小去寻找n个丑数并且用数组保存这n个丑数,而不是去依次去判断数是...原创 2019-06-27 16:56:03 · 132 阅读 · 0 评论 -
20190627-剑指offer48-AcWing-61. 最长不含重复字符的子字符串
剑指offer48-AcWing-61. 最长不含重复字符的子字符串请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。假设字符串中只包含从’a’到’z’的字符。样例输入:"abcabc"输出:3思路:动态规划问题,设置f(i)表示以第i个字符结尾的最长子串的长度。分别用max_length、now_length记录最大字串的长度以及到以第i个位置上字符...原创 2019-06-27 16:06:18 · 136 阅读 · 0 评论 -
20190627-剑指offer47-AcWing-60. 礼物的最大价值
剑指offer47-AcWing-60. 礼物的最大价值在一个m×n的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格直到到达棋盘的右下角。给定一个棋盘及其上面的礼物,请计算你最多能拿到多少价值的礼物?注意:m,n>0样例:输入:[ [2,3,1], [1,7,1], [4,6,1...原创 2019-06-27 15:02:33 · 131 阅读 · 0 评论 -
20190702-剑指offer68-AcWing-88. 树中两个结点的最低公共祖先
剑指offer68-AcWing-88. 树中两个结点的最低公共祖先给出一个二叉树,输入两个树节点,求它们的最低公共祖先。一个树节点的祖先节点包括它本身。注意:输入的二叉树不为空;输入的两个节点一定不为空,且是二叉树中的节点;样例二叉树[8, 12, 2, null, null, 6, 4, null, null, null, null]如下图所示: 8 / \ 1...原创 2019-07-02 18:03:34 · 196 阅读 · 0 评论 -
剑指offer67 把字符串转换成整数
剑指offer67-AcWing-87. 把字符串转换成整数请你写一个函数StrToInt,实现把字符串转换成整数这个功能。当然,不能使用atoi或者其他类似的库函数。样例输入:"123"输出:123注意:你的函数应满足下列条件:忽略所有行首空格,找到第一个非空格字符,可以是 ‘+/−’ 表示是正数或者负数,紧随其后找到最长的一串连续数字,将其解析成一个整数;整数后可能有任意非...原创 2019-07-02 11:49:46 · 121 阅读 · 0 评论 -
剑指offer66 构建乘积数组
剑指offer66-AcWing-86. 构建乘积数组给定一个数组A[0, 1, …, n-1],请构建一个数组B[0, 1, …, n-1],其中B中的元素B[i]=A[0]×A[1]×… ×A[i-1]×A[i+1]×…×A[n-1]。不能使用除法。样例输入:[1, 2, 3, 4, 5]输出:[120, 60, 40, 30, 24]思考题:能不能只使用常数空间?(除了输出的...原创 2019-07-02 11:28:06 · 131 阅读 · 0 评论 -
20190626-剑指offer45-AcWing-58. 把数组排成最小的数
剑指offer45-AcWing-58. 把数组排成最小的数输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组[3, 32, 321],则打印出这3个数字能排成的最小数字321323。样例输入:[3, 32, 321]输出:321323注意:输出数字的格式为字符串。思路: 先把数...原创 2019-06-26 20:12:14 · 109 阅读 · 0 评论 -
剑指offer65 不用加减乘除做加法
剑指offer65-AcWing-85. 不用加减乘除做加法写一个函数,求两个整数之和,要求在函数体内不得使用+、-、×、÷ 四则运算符号。样例输入:num1 = 1 , num2 = 2输出:3思路: 1.num1 与 num2取异或为sum,即相同的为0,然后相异的为1。这样两数相加,同位上都是1的,本来应该进位的没有进位。&nb...原创 2019-07-02 10:45:20 · 111 阅读 · 0 评论 -
20190626-剑指offer44-AcWing-57. 数字序列中某一位的数字
剑指offer44-AcWing-57. 数字序列中某一位的数字数字以0123456789101112131415…的格式序列化到一个字符序列中。在这个序列中,第5位(从0开始计数)是5,第13位是1,第19位是4,等等。请写一个函数求任意位对应的数字。样例输入:13输出:1思路: 0-9有10个数,10-99,有90个数,100-...原创 2019-06-26 19:47:51 · 185 阅读 · 0 评论 -
20190626-剑指offer43-AcWing-56. 从1到n整数中1出现的次数
剑指offer43-AcWing-56. 从1到n整数中1出现的次数输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数。例如输入12,从1到12这些整数中包含“1”的数字有1,10,11和12,其中“1”一共出现了5次。样例输入: 12输出: 5思路: 分别判断数值每一位出现1的次数。  ...原创 2019-06-26 17:25:16 · 105 阅读 · 0 评论 -
剑指offer53.1 数字在排序数组中出现的次数
剑指offer53.1-AcWing-67. 数字在排序数组中出现的次数统计一个数字在排序数组中出现的次数。例如输入排序数组[1, 2, 3, 3, 3, 3, 4, 5]和数字3,由于3在这个数组中出现了4次,因此输出4。样例输入:[1, 2, 3, 3, 3, 3, 4, 5] , 3输出:4思路: 用二分查找的方法,先查找k所在...原创 2019-06-28 10:22:04 · 321 阅读 · 0 评论 -
20190628-剑指offer53.2-AcWing-68. 0到n-1中缺失的数字
剑指offer53.2-AcWing-68. 0到n-1中缺失的数字一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0到n-1之内。在范围0到n-1的n个数字中有且只有一个数字不在该数组中,请找出这个数字。样例输入:[0,1,2,4]输出:3思路: 用二分查找判断,mid是否等于nums[mid] , 从而决...原创 2019-06-28 10:33:28 · 135 阅读 · 0 评论 -
20190628-剑指offer53.3-AcWing-69. 数组中数值和下标相等的元素
剑指offer53.3-AcWing-69. 数组中数值和下标相等的元素假设一个单调递增的数组里的每个元素都是整数并且是唯一的。请编程实现一个函数找出数组中任意一个数值等于其下标的元素。例如,在数组[-3, -1, 1, 3, 5]中,数字3和它的下标相等。样例输入:[-3, -1, 1, 3, 5]输出:3注意:如果不存在,则返回-1。思路:  ...原创 2019-06-28 10:45:35 · 147 阅读 · 0 评论 -
剑指offer64 求1+2+…+n
剑指offer64-AcWing-84. 求1+2+…+n求1+2+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。样例输入:10输出:55思路: 递归进行,利用&&短路运算来终止判断C++ code:class Solution {pu...原创 2019-06-30 19:14:33 · 140 阅读 · 0 评论 -
20190630-剑指offer63-AcWing-83. 股票的最大利润
剑指offer63-AcWing-83. 股票的最大利润假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖 一次 该股票可能获得的利润是多少?例如一只股票在某些时间节点的价格为[9, 11, 8, 5, 7, 12, 16, 14]。如果我们能在价格为5的时候买入并在价格为16时卖出,则能收获最大的利润11。样例输入:[9, 11, 8, 5, 7, 12, 16, 14]输出:...原创 2019-06-30 19:00:44 · 212 阅读 · 0 评论 -
剑指offer62 圆圈中最后剩下的数字
剑指offer62-AcWing-82. 圆圈中最后剩下的数字0, 1, …, n-1这n个数字(n>0)排成一个圆圈,从数字0开始每次从这个圆圈里删除第m个数字。求出这个圆圈里剩下的最后一个数字。样例输入:n=5 , m=3输出:3思路1: 创建一个vector nums 保存0-n-1数值,模拟环形链表,然后循环依次删除第m...原创 2019-06-30 18:02:42 · 171 阅读 · 0 评论 -
20190630-剑指offer61-AcWing-81. 扑克牌的顺子
剑指offer61-AcWing-81. 扑克牌的顺子从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1,J为11,Q为12,K为13,大小王可以看做任意数字。为了方便,大小王均以0来表示,并且假设这副牌中大小王均有两张。样例1输入:[8,9,10,11,12]输出:true样例2输入:[0,8,9,11,12]输出:true思路...原创 2019-06-30 16:55:15 · 140 阅读 · 0 评论 -
20190630-剑指offer60-AcWing-80. 骰子的点数
剑指offer60-AcWing-80. 骰子的点数将一个骰子投掷n次,获得的总点数为s,s的可能范围为n~6n。掷出某一点数,可能有多种掷法,例如投掷2次,掷出3点,共有[1,2],[2,1]两种掷法。请求出投掷n次,掷出n~6n点分别有多少种掷法。样例1输入:n=1输出:[1, 1, 1, 1, 1, 1]解释:投掷1次,可能出现的点数为1-6,共计6种。每种点数都只有1种掷...原创 2019-06-30 16:19:02 · 257 阅读 · 0 评论 -
20190630-剑指offer59-AcWing-79. 滑动窗口的最大值
剑指offer59-AcWing-79. 滑动窗口的最大值给定一个数组和滑动窗口的大小,请找出所有滑动窗口里的最大值。例如,如果输入数组[2, 3, 4, 2, 6, 2, 5, 1]及滑动窗口的大小3,那么一共存在6个滑动窗口,它们的最大值分别为[4, 4, 6, 6, 6, 5]。注意:数据保证k大于0,且k小于等于数组长度。样例输入:[2, 3, 4, 2, 6, 2, 5, 1...原创 2019-06-30 11:19:45 · 168 阅读 · 0 评论 -
剑指offer58.2 左旋转字符串
剑指offer58.2-AcWing-78. 左旋转字符串字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如输入字符串"abcdefg"和数字2,该函数将返回左旋转2位得到的结果"cdefgab"。注意:数据保证n小于等于输入字符串的长度。样例输入:"abcdefg" , n=2输出:"cdefgab"思路1:&nb...原创 2019-06-29 10:48:27 · 203 阅读 · 0 评论 -
剑指offer58.1 翻转单词顺序
剑指offer58.1-AcWing-77. 翻转单词顺序输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串"I am a student.",则输出"student. a am I"。样例输入:"I am a student."输出:"student. a am I"思路: &...原创 2019-06-29 10:34:17 · 199 阅读 · 0 评论 -
Leetcode-235. 二叉搜索树的最近公共祖先
Leetcode-235. 二叉搜索树的最近公共祖先给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉搜索树: root = [6,2,8,0,4,7,9,null,null,...原创 2019-07-04 12:37:45 · 442 阅读 · 0 评论 -
剑指offer57.2 和为S的连续正数序列
剑指offer57.2-AcWing-76. 和为S的连续正数序列输入一个正数s,打印出所有和为s的连续正数序列(至少含有两个数)。例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以结果打印出3个连续序列1~5、4~6和7~8。样例输入:15输出:[[1,2,3,4,5],[4,5,6],[7,8]]思路: 双指针法一...原创 2019-06-28 20:07:49 · 158 阅读 · 0 评论 -
剑指offer57.1 和为S的两个数字
剑指offer57.1-AcWing-75. 和为S的两个数字输入一个数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,输出任意一对即可。你可以认为每组输入中都至少含有一组满足条件的输出。样例输入:[1,2,3,4] , sum=7输出:[3,4]思路: 先对数组快速排序,然后双指针法从前往后和从后...原创 2019-06-28 19:43:21 · 157 阅读 · 0 评论 -
20190628-剑指offer56.2-AcWing-74. 数组中唯一只出现一次的数字
剑指offer56.2-AcWing-74. 数组中唯一只出现一次的数字在一个数组中除了一个数字只出现一次之外,其他数字都出现了三次。请找出那个只出现一次的数字。你可以假设满足条件的数字一定存在。思考题:如果要求只使用 O(n) 的时间和额外 O(1) 的空间,该怎么做呢?样例输入:[1,1,1,2,2,2,3,4,4,4]输出:3思路: &...原创 2019-06-28 18:36:37 · 149 阅读 · 0 评论 -
剑指offer56.1 数组中只出现一次的两个数字
剑指offer56.1-AcWing-72. 平衡二叉树一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。你可以假设这两个数字一定存在。样例输入:[1,2,3,3,4,4]输出:[1,2]思路: 1.首先把所有数值异或得到sum。 2.找到二...原创 2019-06-28 17:25:53 · 145 阅读 · 0 评论 -
剑指offer55.2 平衡二叉树
剑指offer55.2-AcWing-72. 平衡二叉树输入一棵二叉树的根结点,判断该树是不是平衡二叉树。如果某二叉树中任意结点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。注意:规定空树也是一棵平衡二叉树。样例输入:二叉树[5,7,11,null,null,12,9,null,null,null,null]如下所示, 5 / \ 7 11 / ...原创 2019-06-28 16:08:50 · 118 阅读 · 0 评论 -
剑指offer55.1 二叉树的深度
剑指offer55.1-AcWing-71. 二叉树的深度输入一棵二叉树的根结点,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。样例输入:二叉树[8, 12, 2, null, null, 6, 4, null, null, null, null]如下图所示: 8 / \ 12 2 / \ 6 ...原创 2019-06-28 15:31:20 · 131 阅读 · 0 评论 -
20190628-剑指offer54-AcWing-70. 二叉搜索树的第k个结点
剑指offer54-AcWing-70. 二叉搜索树的第k个结点给定一棵二叉搜索树,请找出其中的第k小的结点。你可以假设树和k都存在,并且1≤k≤树的总结点数。样例输入:root = [2, 1, 3, null, null, null, null] ,k = 3 2 / \ 1 3 输出:3思路: 树是二...原创 2019-06-28 15:20:49 · 101 阅读 · 0 评论 -
剑指offer42 连续子数组的最大和
剑指offer42-AcWing-55. 连续子数组的最大和输入一个 非空 整型数组,数组里的数可能为正,也可能为负。数组中一个或连续的多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。样例输入:[1, -2, 3, 10, -4, 7, 2, -5]输出:18思路: 用两个变量,一个变量big_sum记录数...原创 2019-06-25 11:53:17 · 125 阅读 · 0 评论 -
20190625-剑指offer41-AcWing-54. 数据流中的中位数
剑指offer41-AcWing-54. 数据流中的中位数如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。样例输入:1, 2, 3, 4输出:1,1.5,2,2.5解释:每当数据流读入一个数据,就进行一次判断并输出当前的中位数。思路: ...原创 2019-06-25 11:31:26 · 99 阅读 · 0 评论 -
剑指offer40 最小的k个数
剑指offer40-AcWing-53. 最小的k个数输入n个整数,找出其中最小的k个数。注意:数据保证k一定小于等于输入数组的长度;输出数组内元素请按从小到大顺序排序;样例输入:[1,2,3,4,5,6,7,8] , k=4输出:[1,2,3,4]思路: 用大顶堆保存k个数,然后不断的遍历数组,若是数组中的数小于堆顶元素,则替换。实...原创 2019-06-25 10:31:53 · 213 阅读 · 0 评论 -
20190601-剑指offer18.2-AcWing-29. 删除链表中重复的节点
剑指offer18.2-AcWing-29. 删除链表中重复的节点在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留。样例1输入:1->2->3->3->4->4->5输出:1->2->5样例2输入:1->1->1->2->3输出:2->3思路:首先判断节点是否为空,若是空,...原创 2019-06-01 13:20:26 · 136 阅读 · 0 评论