剑指offer
宝蓓
努力变强的IT男
展开
-
剑指Offer——面试题28:字符串的排列
字符串的排列题目:输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符串a、b、c所能排列出的所有字符串abc、acb、bac、bca、cab和cba。输入:abc 输出:abc acb bac bca cab cba 思路:1、用一次遍历,将问题分开来做 2、比如只考虑第一个字符放什么,比如第一个字符可以放a...原创 2018-03-24 00:16:36 · 206 阅读 · 0 评论 -
LeetCode——第92题:指定区间内翻转链表(反转链表 II)
指定区间内翻转链表题目:反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。 说明: 1 ≤ m ≤ n ≤ 链表长度。输入:1->2->3->4->5->NULL, m = 2, n = 4输出:1->4->3->2->5->NULL这道题的重点是:找到需要翻转的区间 总共需要4个指针,其中1个是添加一个虚...原创 2018-08-20 21:00:12 · 5155 阅读 · 0 评论 -
剑指Offer——面试题25:二叉搜索树与双向链表
正则表达式匹配 题目:请实现一个函数用来匹配包括’.’和’‘的正则表达式。模式中的字符’.’表示任意一个字符,而’‘表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串”aaa”与模式”a.a”和”ab*ac*a”匹配,但是与”aa.a”和”ab*a”均不匹配输入:”aaa a.a”、”aaa aa.a” 输出:”true”、”fals...原创 2018-07-22 18:00:07 · 167 阅读 · 0 评论 -
剑指Offer——面试题39:平衡二叉树
看到一篇介绍思路挺好的文章,记录下来: 平衡二叉树的详解转载 2018-07-29 20:24:42 · 179 阅读 · 0 评论 -
剑指Offer——面试题31:整数中1出现的次数
整数中1出现的次数(从1到n整数中1出现的次数)题目:求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数(从1 到 n 中1出现的次数)。输入:13输出:...原创 2018-07-29 12:50:48 · 647 阅读 · 0 评论 -
剑指Offer——面试题29:丑数
丑数题目:把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。输入:{7}输出:9暴力的方法我就不说,对于每个数字都判断是不是丑数,然后累计丑数的数量有没有达到N个 利用丑数的规律,来做的思路:1、后面的丑数其实是前面的丑数,乘以2/3/5所得到...原创 2018-07-29 12:35:25 · 213 阅读 · 0 评论 -
剑指Offer——面试题53:正则表达式匹配
正则表达式匹配题目:请实现一个函数用来匹配包括’.’和’‘的正则表达式。模式中的字符’.’表示任意一个字符,而’‘表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串”aaa”与模式”a.a”和”ab*ac*a”匹配,但是与”aa.a”和”ab*a”均不匹配输入:”aaa a.a”、”aaa aa.a”输出:”true”、”fa...原创 2018-05-23 20:38:35 · 232 阅读 · 0 评论 -
剑指Offer——面试题47:不用加减乘除做加法
不用加减乘除做加法题目:写一个函数,求两个整数之和,要求在函数体内不得使用+、-、×、÷四则运算符号输入:5 7输出:12思路:我们分解一下两个数字相加,1、各个位数上的数字相加,但不考虑进位;2、考虑进位;3、将前面两步的结果相加。 对于不能使用四则运算,我们能用的就是位运算,而位运算是针对二进制的。所以,我们根据十进制数的相加方式来考虑二进制。 对于二进制,1、各个位数...原创 2018-05-22 21:12:33 · 405 阅读 · 0 评论 -
剑指Offer——面试题45:圆圈中最后剩下的数字
圆圈中最后剩下的数字题目:0,1,…,n-1这n个数字排成一个圆圈,从数字0开始每次从这个圆圈里删除第m个数字。求出这个圆圈里剩下的最后一个数字。输入:5,3输出:3思路:1、利用两个指针,1个指针指向第一个数字,另一个指针指向最后一个数字 2、如果前者+后者>s,那么后一个指针往前面走 3、如果前者+后者/*思路:利用2个指针,1个指针指向第一个数字,1个指针...原创 2018-05-21 16:08:40 · 573 阅读 · 0 评论 -
剑指Offer——面试题41:和为s的两个数字 VS 和为s的连续正数序列
和为s的两个数字题目:输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,输出任意一对即可。输入:{1,2,4,7,11,15}输出:4 11思路:1、利用两个指针,1个指针指向第一个数字,另一个指针指向最后一个数字 2、如果前者+后者>s,那么后一个指针往前面走 3、如果前者+后者/*思路:利用2个指针,1个...原创 2018-05-19 15:06:55 · 177 阅读 · 0 评论 -
剑指Offer——面试题30:最小的k个数
最小的k个数题目:输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。输入:8 4 4 5 1 6 2 7 3 8输出:1 2 3 4思路:1、首先,使用快排中的思路:每进行一次快排,会确定一个位置上的数字,使得该位置前的数字都小于该数字,而该位置后的数字都大于该数字。 2、所以,要找最小的k个数,即某一次...原创 2018-05-11 10:17:36 · 229 阅读 · 0 评论 -
剑指Offer——面试题39:二叉树的深度(如何判断某棵二叉树是否是平衡二叉树)
求二叉树的深度题目:输入一棵二叉树的根结点,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。例如下图中的二叉树的深度为4,因为它从根结点到叶结点最长的路径包含4个结点(从根结点1开始,经过结点2和结点5,最终到达叶结点7)。输入:二叉树如下图输出:二叉树的深度为4思路:1、利用递归的思想,对于每个节点,判断它的...原创 2018-05-02 11:38:27 · 1179 阅读 · 0 评论 -
剑指Offer——面试题36:数组中的逆序对
数组中的逆序对题目:在数组中的两个数字如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。例如,有一个数组为Array[0..n] 其中有元素a[i],a[j].如果 当i < j时,a[i]>a[j],那么我们就称(a[i],a[j])为一个逆序对。在数组{7,5,6,4}中一共存在5对逆序对,分别是(7,6),(7,5),...原创 2018-03-31 21:08:02 · 356 阅读 · 0 评论 -
剑指Offer——面试题4:替换空格
替换空格题目:请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。输入:”We Are Happy.”输出:”We%20Are%20Happy.”思路:1、先遍历一遍字符串,找到原字符数组的长度和空格的个数 2、然后对于每个空格为字符数组长度...原创 2018-04-07 17:15:41 · 169 阅读 · 0 评论 -
剑指Offer——面试题33:把数组排成最小的数
把数组排成最小的数题目:输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。输入:{3,32,321}输出:321323思路:1、主要的思路是利用递归去判断两个数字m和n,合并后是mn大还是nm大。 2、在这里需要注意如...原创 2018-03-24 21:42:02 · 267 阅读 · 0 评论 -
剑指Offer——面试题29:数组中出现次数超过一半的数字
数组中出现次数超过一半的数字题目:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。输入:{1,2,3,2,2,2,5,4,2}输出:2思路:1、针对本道题的特点,用一次遍历即时间复杂度为O(n),空间复杂度为O...原创 2018-03-24 15:45:04 · 220 阅读 · 0 评论 -
剑指Offer——面试题51:数组中重复的数字
数组中重复的数字题目:在一个长度为n的数组里的全部数字都在0到n-1的范围内。数组中某些数字是反复的,但不知道有几个数字反复了。也不知道每一个数字反复的次数。请找出数组中随意一个反复的数字。比如假设输入长度为7的数组{2,3,1,0,2,5,3},那么相应的输出是反复的数字2或者3.输入:{2,3,1,0,2,5,3}输出:2,3思路:1、用一次遍历,在遍历数组a的第一...原创 2018-03-24 15:10:04 · 348 阅读 · 0 评论 -
LeetCode——第12题:带最小值的栈(min栈)
带最小值操作的栈(min栈)题目:实现带有最小值min方法的栈 说明: 实现一个带有取最小值min方法的栈,min方法将返回当前栈中的最小值。 你实现的栈将支持push,pop 和 min 操作,所有操作要求都在O(1)时间内完成。输入:push(1),pop(),push(2),push(3),min(), push(1),min()输出:1,2,1这道题总共有三种解法...原创 2018-09-02 09:55:11 · 1029 阅读 · 0 评论