
面试题
文章平均质量分 52
瀛洲客
海纳百川,有容乃大;壁立千仞,无欲则刚
展开
-
剑指offer之调整数组元素奇数偶数顺序
问题:输入一个整数数组,实现一个函数来调整该数组中数字元素的顺序,使得所有的奇数位于数组的前半部分,所有的偶数都位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置保持不变。思路:1.简单点的方法,就是用两个循环,先从头挑选奇数存到vector,在从头挑选偶数存到vector.具体代码:(C++)class Solution{public: void reOrderArra...原创 2018-03-29 17:44:31 · 206 阅读 · 0 评论 -
剑指offer之矩阵覆盖
问题:我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形,请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?思路:首先理解清楚,是去覆盖,不是让你随便摆,也就是说去覆盖2*n的矩形,也就是说矩形的一边始终保持为2; 故而,n=1时,就方法数m =1;(就一种方法) n=2时,m=2;(两块都横着放,或者两块都竖着放) ...原创 2018-03-28 17:59:19 · 252 阅读 · 0 评论 -
剑指offer之变态跳台阶
问题:一只青蛙一次可以跳上1级台阶,也可以跳上2级,3级……n级台阶,求该青蛙跳上一个n级台阶总共有多少种跳法。思路:其实是隔板问题,假设有n个台阶,有n-1个空隙,可以用0~n-1个隔板隔开,则种方法有:C(n-1,0)+C(n-1,1)+C(n-1,2)+……+C(n-1,n-1) = 2^(n-1) ,即2的n-1次方。其中C表示组合。更简单的方式是用位移,因为每向左移一位就相当于乘以2。具...原创 2018-03-28 14:01:40 · 144 阅读 · 0 评论 -
剑指offer之跳台阶问题
问题:一只青蛙一次可以跳上1级台阶,也可以跳上2级,求该青蛙跳上一个n级的台阶总共有多少种跳法。思路:当n=1时,总跳法m = 1; 当n=2时,总跳法m = 2 当n=3时,假设这只青蛙只差一步就能跳到第3阶,那它现在就两种情况,要么在第1阶,要么在第2阶,那青蛙跳上第三阶的总跳法就应该是这两种之和,即m = 1+2 (青蛙到达第1阶有1种方法,到达第2阶有...原创 2018-03-28 11:56:37 · 241 阅读 · 0 评论 -
剑指offer之斐波拉契数列
问题:输入一个整数n,请你输出斐波拉契数列的第n项;知识点:斐波拉契数列--又称为“黄金分割数列”、“兔子数列”;指的是 这个的数列:1,1,2,3,5,8,13,21,34,……即从第三项开始,F(n) = F(n-1) + F(n-2); F(1) =1,F(2) =1;思路:循环,保留中间结果。具体代码:(C++)class Solution{public: int Fibonacc...原创 2018-03-28 11:38:11 · 213 阅读 · 0 评论 -
剑指offer之旋转数组的最小元素
问题:把一个数组最开始的若干个元素搬到数组的末尾,被称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。例如:数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。假设给出的所有元素都大于0,若数组大小为0,则返回0。思路:1.既然是非递减数组,旋转后比如可以分为两段非递减数组,只要循环比较相邻的两个元素,当前一个大于后一个时,后者便是数组中的...原创 2018-03-27 16:30:47 · 236 阅读 · 0 评论 -
剑指offer之用栈实现队列
问题:用两个栈来实现一个队列,完成队列的Push和Pop操作,假设队列中的元素为int类型。思路:两个栈,stack1:负责压栈(Push),stack2:负责弹栈(Pop, 如果为空,则将stack1中元素压入stack2);具体代码如下:(C++)class Solution{public: void push(int node) { stack1.push(node...原创 2018-03-27 12:04:15 · 179 阅读 · 0 评论 -
剑指offer之重建二叉树
问题:输入某二叉树的前序遍历和中序遍历的结果,请重新建出该二叉树。假设输入的前序遍历和中序遍历的结果中都是不含重复的数字。例如:输入的前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重新建立二叉树并返回。知识点:前序遍历:父节点--左子节点--右子节点 (又叫先序遍历,先根遍历);中序遍历:左子节点--父节点--右子节点 (又叫中根遍历);解决思路...原创 2018-03-26 18:37:06 · 156 阅读 · 0 评论 -
剑指offer之倒序打印链表
问题:输入一个链表,从尾到头打印链表的每个节点的值。思路:借助辅助栈stack,或使用递归。具体代码:(C++)struct ListNode{ int val; struct ListNode *next; ListNode(int x):val(x),next(NULL){}};class Solution{public: vector<int> print...原创 2018-03-26 11:49:32 · 228 阅读 · 0 评论 -
剑指offer之替换空格
问题:请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We are happy时,则经过替换之后的字符串为We%20are%20happy。解决思路:首先计算原字符串长度,空格个数,然后计算替换之后的长度,设置两个指针分别指向原,新字符串的尾部,逐个赋值。复杂度:O(n);具体代码:(C++)class Solution{public: char* replaceSpa...原创 2018-03-26 11:32:36 · 142 阅读 · 0 评论 -
剑指offer之二维数组的查找
问题:在一个二维数组中,每一行的元素都是按照从左到右递增的顺序排序的,每一列都是按照从上到下递增的顺序排序的,请完成一个函数,输入这样的一个的二维数组和一个整数,判断数组中是否含有该整数。解决思路:依次与右上角的数字元素比较,如果该数字大于要查找的整数,则剔除该列(因为该数字是该列中最小的);如果该数字小于要查找的整数,则剔除该行(因为该数字是该行中最大的);复杂度:O(m+n),行数m,列数n。...原创 2018-03-26 10:49:58 · 148 阅读 · 0 评论 -
剑指offer之顺时针打印矩阵
问题:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵:1,2,3,4,5,6,7,8,9,则依次输出1,2,3,6,9,8,7,4,5思路:利用循环,控制循环条件即可具体代码如下:(C++)class Solution{public: vector<int> printMatrix(vector<vector<int>>...原创 2018-03-30 15:32:56 · 156 阅读 · 0 评论 -
剑指offer之合并两个已排序好的链表
问题:输入两个单调递增的链表,输出两个链表合成后的链表,并满足合成后的链表单调不减规则。思路:既然输入的链表已经单调递增,那就采取“递归”逐一比较合成是最直接的方法。具体代码:(C++)struct ListNode{ int val; ListNode* next; ListNode(int x):val(x),next(nullptr){}};class Solution{ ...原创 2018-03-30 12:00:56 · 162 阅读 · 0 评论 -
剑指offer之单链表的反转
问题:输入一个链表,将其进行反转。思路:定义三个指针分别指向当前结点,前一个结点,后一个结点,然后依次反转指针指向。具体代码如下:(C++)struct ListNode{ int val; ListNode* next; ListNode(int x):val(x),next(nullptr){}};class Solution{public: ListNode*...原创 2018-03-30 11:27:46 · 230 阅读 · 0 评论 -
剑指offer之链表中倒数第k个结点
问题:输入一个链表,输出该链表中倒数第k个结点。思路:定义两个指针,一快一慢,快的先走k步;具体代码:(C++)struct ListNode{ int val; ListNode* next; ListNode(int x):val(x),next(nullptr){}};class Solution{public: ListNode* ...原创 2018-03-29 18:16:54 · 167 阅读 · 0 评论 -
剑指offer之二进制中1的个数
问题:输入一个整数,输出该数二进制表示中的1的个数。其中负数用补码表示。思路:1.简单的方法就是逐位和1相与;2.巧妙方法:一个整数减去1,再和原数做“按位与”-“&”运算,会将二进制表示中最右边的一个1变为0;那么二进制中有多少个1,就可以进行多少次这个的操作。具体代码:(C++)1.class Solution{public: int NumberOfOne(int n)...原创 2018-03-28 18:11:32 · 151 阅读 · 0 评论