随笔分类 -  面试总结

1
摘要:题目:一个台阶总共有n级,如果一次可以跳1级,也可以跳2级。 求总共有多少总跳法,并分析算法的时间复杂度。 分析: 采用递归思想,从第n个台阶开始研究,第 n 个台阶有两种跳法,一种是跳一级,还有 n -1级台阶要跳,另一种是跳两级,还有n -2级需要跳。 公式如下: f(n) = f(n-1) + 阅读全文
posted @ 2021-01-31 11:04 天涯学馆 阅读(125) 评论(0) 推荐(0)
摘要:题目: 定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部。 例如把字符串"abcdef" 左旋2位 得到字符串“cdefab"。请实现字符串左旋转的函数。 要求时间对长度n的字符串操作的复杂度位O(n),辅助内存为O(1). 分析: 这题的难点是辅助内存只能只用O(1),相当于只能 阅读全文
posted @ 2021-01-31 11:03 天涯学馆 阅读(92) 评论(0) 推荐(0)
摘要:题目:在字符串中找出连续最长字符串,并把这个串的长度返回。 例如:字符串“abcd12345ed125ss123456789”,他的最长字符串为“123456789“,长度为9. 实现如下: #include<iostream> #include<stdlib.h> #include<string. 阅读全文
posted @ 2021-01-31 10:53 天涯学馆 阅读(131) 评论(0) 推荐(0)
摘要:题目是:链表操作,单链表就地逆置 分析: 这题只需要设置三个指针就搞定了,ListNode* p 表示当前指针, ListNode* fp: 上一个节点指针, ListNode * ep :下一个节点指针 p ->next = fp; fp = p; p = ep; ep = p->next; 具体 阅读全文
posted @ 2021-01-31 10:52 天涯学馆 阅读(113) 评论(0) 推荐(0)
摘要:编程求解: 输入两个整数 n 和 m,从数列1,2,3…n中随意取几个数, 使其和等于 m ,要求将其中所有的可能组合列出来. 分析: 可以使用递归思想, 从第n个数开始找其组合, 1)包括n的所有组合 2)不包括n的所有组合 把所有组合整合起来就OK了。 下面来看具体的实现: #include<i 阅读全文
posted @ 2021-01-30 22:53 天涯学馆 阅读(542) 评论(1) 推荐(0)
摘要:题目:输入一个表示整数的字符串,把该字符串转换成整数并输出。 例如输入字符串"345",则输出整数345。 分析: 可以直接使用atoi函数, 但这个题目显然不希望你这么做 我们还是按照常规方法来做,比如整数字符串长度为n= strlen(str)。 最右边的为个数,往左依次是十位,百位等。 右边— 阅读全文
posted @ 2021-01-30 22:41 天涯学馆 阅读(126) 评论(0) 推荐(0)
摘要:使用通项公式的方式,算法复杂度为o(1),应该是最快的。 先看下Fibonacci数列的定义: 使用通项公式的概念,可以得到: 使用矩阵计算可以得到: 计算详细过程,请参考:http://blog.csdn.net/zyearn/article/details/7878657 实现过程如下: #in 阅读全文
posted @ 2021-01-30 22:38 天涯学馆 阅读(87) 评论(0) 推荐(0)
摘要:题目:n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始, 每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字)。 当一个数字删除后,从被删除数字的下一个继续删除第m个数字。 求出在这个圆圈中剩下的最后一个数字。 分析: 最初的想法是想设计一个数据结构,实现随机 阅读全文
posted @ 2021-01-30 22:33 天涯学馆 阅读(137) 评论(0) 推荐(0)
摘要:题目:在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b。 分析: 一般方法是使用每个字符间都比较一次,算法复杂度为o(n^2) 可以使用空间换时间的方法,字符在ASCII码的表示范围内(0~256),使用捅排序思想。 使用int str[256] 表示256个字符在此字符 阅读全文
posted @ 2021-01-29 23:03 天涯学馆 阅读(172) 评论(0) 推荐(0)
摘要:输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印。 例如输入 8 / / 6 10 / / / / 5 7 9 11 输出86 10 5 7 9 11。 #include<iostream> using namespace std; struct BTree{ BTree 阅读全文
posted @ 2021-01-29 23:02 天涯学馆 阅读(83) 评论(0) 推荐(0)
摘要:题目:输入一颗二元查找树,将该树转换为它的镜像, 即在转换后的二元查找树中,左子树的结点都大于右子树的结点。 用递归和循环两种方法完成树的镜像转换。 例如: 8 / / 6 10 // // 5 7 9 11 输出: 8 / / 10 6 // // 11 9 7 5 分析: 可以使用递归思想,BT 阅读全文
posted @ 2021-01-29 23:00 天涯学馆 阅读(127) 评论(0) 推荐(0)
摘要:题目:输入一个已经按升序排序过的数组和一个数字, 在数组中查找两个数,使得它们的和正好是输入的那个数字。 要求时间复杂度是O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。 分析: 通过设置数组首尾指针,i = 0, j = len -1, 因为数组是有序的,当array[i] + ar 阅读全文
posted @ 2021-01-29 22:58 天涯学馆 阅读(305) 评论(0) 推荐(0)
摘要:题目:输入一个单向链表,输出该链表中倒数第k个结点。链表的倒数第0个结点为链表的尾指针。 分析: 单链表只能向后遍历,不能向前遍历,尾指针好找,倒数第K个不能从尾指针向前找。 倒的不好找,正的好找,我们只需要知道链表的总长度,就可以知道正数第几个节点(len(list) - k -1)。 实现如下: 阅读全文
posted @ 2021-01-29 22:56 天涯学馆 阅读(111) 评论(0) 推荐(0)
摘要:题目:输入一个整数数组,判断该数组是不是某二元查找树的后序遍历结果 如果是返回true,否则返回false。 分析: 问题的关键是要找到二元查找树的后序遍历结果,字符串的比较很简单。 下面看看实现: 输入整数序列为:5,7,6,9,11,10,8 二元查找树: 8 / / 6 10 / / / / 阅读全文
posted @ 2021-01-29 22:53 天涯学馆 阅读(126) 评论(0) 推荐(0)
摘要:链表假设是单链表, 这题需要找到相交的特征,相交后,最后一个节点肯定相同,所以,如果相同则是相交,否则不相交。 下面看看实现: #include<iostream> using namespace std; struct LNode{ LNode(int _d = 0):data(_d),next( 阅读全文
posted @ 2021-01-29 22:44 天涯学馆 阅读(113) 评论(0) 推荐(0)
摘要:题目:输入n个整数,输出其中最小的k个。 例如输入7,2,4,5,1,3,6,8这8个数字,则最小的4个数字为1,2,3和4。 下面使用快速排序和分治法的思想, 1)先找选一个元素a遍历一次剩余的其他元素,使得a左边的元素都是小于它的,a右边的元素都是大于它的。 2)再统计a 左边的元素或者包括a 阅读全文
posted @ 2021-01-29 22:42 天涯学馆 阅读(133) 评论(0) 推荐(0)
摘要:从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。 打印出和与输入整数相等的所有路径。 例如 输入整数22和如下二元树 10 / / 5 12 / \ 4 7 则打印出两条路径:10, 12和10, 5, 7。 #include <iostream> #include <list> 阅读全文
posted @ 2021-01-29 22:40 天涯学馆 阅读(96) 评论(0) 推荐(0)
摘要:题目描述: 输入一个整形数组,数组里有正数也有负数。 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。 求所有子数组的和的最大值。要求时间复杂度为O(n)。 例如输入的数组为1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为3, 10, -4, 7, 2, 因此输 阅读全文
posted @ 2021-01-28 23:18 天涯学馆 阅读(99) 评论(0) 推荐(0)
摘要:定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。 要求函数min、push以及pop的时间复杂度都是O(1)。 这个题的关键是设计min时间复杂度为O(1)的函数,通常min函数的复杂度为O(n)。 可以使用空间换时间的策略,加一个栈来维护min函数值,每一次pop栈,min函数对应 阅读全文
posted @ 2021-01-28 23:15 天涯学馆 阅读(115) 评论(0) 推荐(0)
摘要:题目: 输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。 要求不能创建任何新的结点,只调整指针的指向。 10 / / 6 14 / / / / 4 8 12 16 转换成双向链表 4=6=8=10=12=14=16。 实现如下: #include<iostream> using name 阅读全文
posted @ 2021-01-28 23:12 天涯学馆 阅读(135) 评论(0) 推荐(0)

1