剑指offer
小夥
这个作者很懒,什么都没留下…
展开
-
剑指offer-面试题4:二维数组中的查找
面试题4:二维数组中的查找在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。思路:1、可以考虑对每行进行二分查找2、以右上或左下为起点,这里选择右上,依次向左扫描,如果当前值小于target,则row++(每行最后一个是该行最大的,如果它都小...原创 2019-04-04 11:04:46 · 209 阅读 · 0 评论 -
剑指offer-面试题19:正则表达式匹配
请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配思路:由于*号比较难处理,先考虑*号的情况。当*(pattern+1) == '*'的时...原创 2019-04-11 18:47:20 · 247 阅读 · 0 评论 -
剑指offer-面试题18:删除链表的结点
题目一:在O(1)的时间内删除链表结点(牛课无该题)给定单向链表的头指针和一个节点指针,定义一个函数在O(1)时间内删除该节点。思路:首先判断该节点p有没有next,如果有,直接p=p->next,相当于就删除了该节点。其次,在没有next的情况下,分两种情况,该节点是头结点(链表只有一个元素)或者该节点不是头结点。当该节点是头结点的时候,返回nullptr即可,不是的时候,从头往后...原创 2019-04-11 18:40:17 · 307 阅读 · 0 评论 -
剑指offer-面试题17:打印从1到最大的n位数(牛课无该题)
输入数字n,按顺序打印出从1到最大的n位十进制数,比如输入3,则打印出1、2、3....999。思路:由于n的大小不一定,所以可能longlong也存不下。1、模拟法,利用字符串模拟加法操作2、全排列,利用递归处理代码一(模拟):bool increment(char *s, int n){ s[0]++; int t = 0; w...原创 2019-04-11 18:37:01 · 187 阅读 · 0 评论 -
剑指offer-面试题16:数值的整数次方
面试题16:数值的整数次方给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。思路:方法1,直接求,注意任意数的0次方等于1,负数的次方等于它的倒数(时间复杂度O(n))。方法2,利用平方的性质,a^n=a^(n/2) * a^(n/2)或a^n=a^(n-1/2) * a^(n-1/2)*a(分别为偶数、奇数的情况)(时间复杂度O...原创 2019-04-11 18:35:53 · 243 阅读 · 0 评论 -
剑指offer-面试题15:二进制中1的个数
面试题15:二进制中1的个数输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。思路:方法1,使用一个无符号的整数1,从右到左去&n,执行完一次后,向左移位(对于32位整数来说,需要执行32次)。方法2,使用n&(n-1),来求(执行次数为1的个数)。代码一(普通解法):int NumberOf1(int n){ int count = 0;...原创 2019-04-11 18:24:46 · 188 阅读 · 0 评论 -
剑指offer-面试题13:机器人的运动范围
地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?思路:dfs狂搜class Solution ...原创 2019-04-11 17:18:13 · 146 阅读 · 0 评论 -
剑指offer-面试题12:矩阵中的路径
请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则之后不能再次进入这个格子。 例如 a b c e s f c s a d e e 这样的3 X 4 矩阵中包含一条字符串"bcced"的路径,但是矩阵中不包含"abcb"路径,因为字符串的第一个...原创 2019-04-11 17:17:28 · 141 阅读 · 0 评论 -
剑指offer-面试题11:旋转数组的最小数字
面试题11:旋转数组的最小数字把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。思路:由于旋转数组的特性,尾元素肯定是小于首元素的(当不考虑重复值时)。所以,每次找中...原创 2019-04-11 17:16:23 · 182 阅读 · 0 评论 -
剑指offer-面试题10:斐波那契数列
题目一:寻找斐波那契第n项大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39思路:1、递归(由于可能发生栈溢出,故不推荐)2、循环(推荐,这里使用)3、公式法(可以了解)class Solution {public: int Fibonacci(int n) { if(n == ...原创 2019-04-04 11:26:39 · 255 阅读 · 0 评论 -
剑指offer-面试题9:用两个栈实现队列
面试题9:用两个栈实现队列用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。思路:用stack2用于输出,每次存入stack1,当要输入时,倒入到stack2。class Solution{public: void push(int node) { stack1.push(node); } int pop(...原创 2019-04-04 11:25:03 · 226 阅读 · 0 评论 -
剑指offer-面试题8:二叉树的下一个结点
面试题8:二叉树的下一个结点给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。思路:如果该结点有右子树,那么下一个结点为它右子树的最左子树。如果没有右子树,那么下一个结点为它父节点(当且仅当它自己是该父节点的左子树,如果不是,继续往上找)。/*struct TreeLinkNode { in...原创 2019-04-04 11:23:32 · 158 阅读 · 0 评论 -
剑指offer-面试题7:重建二叉树
面试题7:重建二叉树输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。思路:根据二叉树遍历的性质,得知前序的第一个元素为父节点,中序父节点两边的分别为它的左右子树,递归即可。class Solutio...原创 2019-04-04 11:13:06 · 184 阅读 · 0 评论 -
剑指offer-面试题6:从尾到头打印链表
面试题6:从尾到头打印链表输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。思路:有两种方向,一是循环,用栈存储。二是递归。但是由于递归可能导致爆栈,故不建议采用。/*** struct ListNode {* int val;* struct ListNode *next;* ListNode(int x) :* ...原创 2019-04-04 11:11:11 · 217 阅读 · 0 评论 -
剑指offer-面试题5:替换空格
面试题5:替换空格请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。思路:首先要确定是不是在本身上修改,如果是,则要题目保证内存足够。否则,可以考虑自己new空间。先统计空格数,然后倒着赋值即可。class Solution {public: void r...原创 2019-04-04 11:07:16 · 164 阅读 · 0 评论 -
剑指offer-面试题20:表示数值的字符串
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。思路:首先可以推出格式(+-)(num1)(.num2)([Ee](+-)(num3)),其中num123均为1-9的数字串。当Ee存在时,后面的数...原创 2019-04-11 18:48:39 · 259 阅读 · 0 评论