随笔- 509
文章- 0
评论- 151
阅读-
22万
11 2013 档案
剑指Offer - 九度1521 - 二叉树的镜像
摘要:剑指Offer - 九度1521 - 二叉树的镜像2013-11-30 23:32题目描述:输入一个二叉树,输出其镜像。输入:输入可能包含多个测试样例,输入以EOF结束。对于每个测试案例,输入的第一行为一个整数n(0 4 using namespace std; 5 6 const int MAXN = 1005; 7 int a[MAXN][4]; 8 int n; 9 int r; 10 bool first_node; 11 12 void myswap(int &a, int &b) 13 { 14 a ^= b ^= a ^= b; 15 } 16 17 v...
阅读全文
剑指Offer - 九度1520 - 树的子结构
摘要:剑指Offer - 九度1520 - 树的子结构2013-11-30 22:17题目描述:输入两颗二叉树A,B,判断B是不是A的子结构。输入:输入可能包含多个测试样例,输入以EOF结束。对于每个测试案例,输入的第一行一个整数n,m(1 4 using namespace std; 5 6 const int MAXN = 1005; 7 int a[MAXN][3]; 8 int b[MAXN][3]; 9 int c[MAXN]; 10 int na, nb; 11 int ra, rb; 12 13 bool is_subtree(const int a[][3], con...
阅读全文
剑指Offer - 九度1519 - 合并两个排序的链表
摘要:剑指Offer - 九度1519 - 合并两个排序的链表2013-11-30 22:04题目描述:输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。(hint: 请务必使用链表。)输入:输入可能包含多个测试样例,输入以EOF结束。对于每个测试案例,输入的第一行为两个整数n和m(0 4 using namespace std; 5 6 struct Node{ 7 int val; 8 struct Node *next; 9 Node(int _val = 0): val(_val), next(NULL){} 1...
阅读全文
剑指Offer - 九度1518 - 反转链表
摘要:剑指Offer - 九度1518 - 反转链表2013-11-30 03:09题目描述:输入一个链表,反转链表后,输出链表的所有元素。(hint : 请务必使用链表)输入:输入可能包含多个测试样例,输入以EOF结束。对于每个测试案例,输入的第一行为一个整数n(0 4 using namespace std; 5 6 struct Node{ 7 int val; 8 struct Node *next; 9 Node(int _val): val(_val), next(NULL){}10 };11 12 Node *reverse_list(Node *head)1...
阅读全文
剑指Offer - 九度1517 - 链表中倒数第k个结点
摘要:剑指Offer - 九度1517 - 链表中倒数第k个结点2013-11-30 02:57题目描述:输入一个链表,输出该链表中倒数第k个结点。(hint: 请务必使用链表。)输入:输入可能包含多个测试样例,输入以EOF结束。对于每个测试案例,输入的第一行为两个整数n和k(0”进行指诊检查,确保不发生内存错误。野指针是严重错误,面试里敢犯这等错误的话,估计Offer也就无缘了。 1 // 651911 zhuli19901106 1517 Accepted 点击此处查看所有case的执行结果 1552KB 1018B 100MS 2 // 2013111...
阅读全文
剑指Offer - 九度1516 - 调整数组顺序使奇数位于偶数前面
摘要:剑指Offer - 九度1516 - 调整数组顺序使奇数位于偶数前面2013-11-30 02:17题目描述:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。输入:每个输入文件包含一组测试案例。对于每个测试案例,第一行输入一个n,代表该数组中数字的个数。接下来的一行输入n个整数。代表数组中的n个数。输出:对应每个测试案例,输入一行n个数字,代表调整后的数组。注意,数字和数字之间用一个空格隔开,最后一个数字后面没有空格。样例输入:51 2 3 4 5样例输出:1 3 5 2
阅读全文
剑指Offer - 九度1515 - 打印1到最大的N位数
摘要:剑指Offer - 九度1515 - 打印1到最大的N位数2013-11-30 01:11题目描述:给定一个数字N,打印从1到最大的N位数。输入:每个输入文件仅包含一组测试样例。对于每个测试案例,输入一个数字N(1 4 using namespace std; 5 6 int main() 7 { 8 int i; 9 int n, N;10 11 while(scanf("%d", &n) == 1){12 N = 1;13 for(i = 0; i < n; ++i){14 N *= 10;15 ...
阅读全文
剑指Offer - 九度1514 - 数值的整数次方
摘要:剑指Offer - 九度1514 - 数值的整数次方2013-11-30 00:49题目描述:给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。输入:输入可能包含多个测试样例。对于每个输入文件,第一行输入一个整数T,表示测试案例的数目,接下来的T行每行输入一个浮点数base和一个整数exponent,两个数中间用一个空格隔开。输出:对应每个测试案例,输出一个浮点数代表答案,保留两位小数即可。样例输入:51.0 100.0 -51.0 01.2 52.0 -1样例输出:1.00e+00fINF1.00e+00f2.49e+00f5.00
阅读全文
剑指Offer - 九度1513 - 二进制中1的个数
摘要:剑指Offer - 九度1513 - 二进制中1的个数2013-11-29 23:35题目描述:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。输入:输入可能包含多个测试样例。对于每个输入文件,第一行输入一个整数T,代表测试样例的数量。对于每个测试样例输入为一个整数。n保证是int范围内的一个整数。输出:对应每个测试案例,输出一个整数,代表输入的那个数中1的个数。样例输入:345-1样例输出:1232题意分析: 这题是《编程之美》的原题了,只需要了解两个很巧妙的位操作:x & (-x),x & (x - 1)。 x & (-x)是树状数组的lowbit操
阅读全文
剑指Offer - 九度1512 - 用两个栈实现队列
摘要:剑指Offer - 九度1512 - 用两个栈实现队列2013-11-29 21:23题目描述:用两个栈来实现一个队列,完成队列的Push和Pop操作。队列中的元素为int类型。输入:每个输入文件包含一个测试样例。对于每个测试样例,第一行输入一个n(1=0)2. POP 从队列中pop一个数。输出:对应每个测试案例,打印所有pop操作中从队列pop中的数字。如果执行pop操作时,队列为空,则打印-1。样例输入:3PUSH 10POPPOP样例输出:10-1题意分析: 用两个栈实现一个队列。栈(stack)的特点是先进后出,是反的;而队列(queue)的特点是先进先出,是正的。因此用两个栈,反.
阅读全文
剑指Offer - 九度1511 - 从尾到头打印链表
摘要:剑指Offer - 九度1511 - 从尾到头打印链表2013-11-29 21:08题目描述:输入一个链表,从尾到头打印链表每个节点的值。输入:每个输入文件仅包含一组测试样例。每一组测试案例包含多行,每行一个大于0的整数,代表一个链表的节点。第一行是链表第一个节点的值,依次类推。当输入到-1时代表链表输入完毕。-1本身不属于链表。输出:对应每个测试案例,以从尾到头的顺序输出链表每个节点的值,每个值占一行。样例输入:12345-1样例输出:54321题意分析: 给定一条单链表,从未到头打印出来。第一个念头是可以用头递归的写法进行倒序输出,但不论头递归还是尾递归都不是个会写代码的人该写出来的,.
阅读全文
剑指Offer - 九度1510 - 替换空格
摘要:剑指Offer - 九度1510 - 替换空格2013-11-29 20:53题目描述:请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。输入:每个输入文件仅包含一组测试样例。对于每组测试案例,输入一行代表要处理的字符串。输出:对应每个测试案例,出经过处理后的字符串。样例输入:We Are Happy样例输出:We%20Are%20Happy题意分析: 题目给出的需求很简单,将空格‘ ’编码成%20,这就是传统的urlencode功能。对于这种单字符的匹配,很容易硬编码实现。但如果匹配的模.
阅读全文
剑指Offer - 九度1507 - 不用加减乘除做加法
摘要:剑指Offer - 九度1507 - 不用加减乘除做加法2013-11-29 20:00题目描述:写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。输入:输入可能包含多个测试样例。对于每个测试案例,输入为两个整数m和n(1 4 using namespace std; 5 6 void cal_onebit(const int m, const int n, int i, int &carry, int &res) 7 { 8 res = (res | 9 (10 (m & (1 << i)) ^ 11 ...
阅读全文
剑指Offer - 九度1506 - 求1+2+3+...+n
摘要:剑指Offer - 九度1506 - 求1+2+3+...+n2013-11-29 19:22题目描述:求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。输入:输入可能包含多个测试样例。对于每个测试案例,输入为一个整数n(1 4 using namespace std; 5 6 void add2(long long int &x, long long int &y, int i, int j, long long int &res) 7 { 8 res += (((!!(x &
阅读全文
剑指Offer - 九度1505 - 两个链表的第一个公共结点
摘要:剑指Offer - 九度1505 - 两个链表的第一个公共结点2013-11-24 20:09题目描述:输入两个链表,找出它们的第一个公共结点。输入:输入可能包含多个测试样例。对于每个测试案例,输入的第一行为两个整数m和n(1 4 using namespace std; 5 6 struct ListNode{ 7 int val; 8 struct ListNode *next; 9 ListNode(int _val = 0): val(_val), next(NULL){} 10 }; 11 12 void delete_list(ListNod...
阅读全文
剑指Offer - 九度1391 - 顺时针打印矩阵
摘要:剑指Offer - 九度1391 - 顺时针打印矩阵2013-11-24 04:55题目描述:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵:1 2 3 45 6 7 89 10 11 1213 14 15 16则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.输入:输入可能包含多个测试样例,对于每个测试案例,输入的第一行包括两个整数m和n(1 4 using namespace std; 5 6 int m, n; 7 const int MAXN = 1005; 8 int a[MAXN][MAXN]; 9.
阅读全文
剑指Offer - 九度1389 - 变态跳台阶
摘要:剑指Offer - 九度1389 - 变态跳台阶2013-11-24 04:20题目描述:一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。输入:输入可能包含多个测试样例,对于每个测试案例,输入包括一个整数n(1 4 using namespace std; 5 6 int main() 7 { 8 int n; 9 10 while(scanf("%d", &n) == 1){11 printf("%lld\n", 1LL << (n - 1));12 }13 14 ...
阅读全文
剑指Offer - 九度1388 - 跳台阶
摘要:剑指Offer - 九度1388 - 跳台阶2013-11-24 03:43题目描述:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。输入:输入可能包含多个测试样例,对于每个测试案例,输入包括一个整数n(1 4 using namespace std; 5 6 int main() 7 { 8 int n, i; 9 long long int f1, f2, f3;10 11 while(scanf("%d", &n) == 1){12 if(n == 0){13 printf...
阅读全文
剑指Offer - 九度1387 - 斐波那契数列
摘要:剑指Offer - 九度1387 - 斐波那契数列2013-11-24 03:08题目描述:大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。斐波那契数列的定义如下:输入:输入可能包含多个测试样例,对于每个测试案例,输入包括一个整数n(1= 3 数学推导上,可以用特征根方程求出x^2 = x + 1的俩根 x = (1 土 sqrt(5)) / 2,编程的话你当然不会这么无聊去惹出一对无理数来。 方法一,从f[1]、f[2]开始逐个计算f[3]到f[n],求出f[n]。时间复杂度O(n),空间复杂度O(1)。 方法二,用矩阵来计算。 将[f[n + 1]...
阅读全文
剑指Offer - 九度1386 - 旋转数组的最小数字
摘要:剑指Offer - 九度1386 - 旋转数组的最小数字2013-11-24 01:57题目描述:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。输入:输入可能包含多个测试样例,对于每个测试案例,输入的第一行为一个整数n(1= a[i + 1]的那个位置,就能确定a[i + 1]就是最小元素了。对于k = 0的情况,整个数组没旋转,那么会一直扫到数组结尾,加一句话特殊处理。应该避免为这么一个特殊case使用%运算,因为性能会出现O(n
阅读全文
剑指Offer - 九度1385 - 重建二叉树
摘要:剑指Offer - 九度1385 - 重建二叉树2013-11-23 23:53题目描述:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并输出它的后序遍历序列。输入:输入可能包含多个测试样例,对于每个测试案例,输入的第一行为一个整数n(1 4 #include 5 using namespace std; 6 7 void construct_tree(vector &a, vector &b, v
阅读全文
剑指Offer - 九度1384 - 二维数组中的查找
摘要:剑指Offer - 九度1384 - 二维数组中的查找2013-11-23 23:23题目描述:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。输入:输入可能包含多个测试样例,对于每个测试案例,输入的第一行为两个整数m和n(1 4 using namespace std; 5 6 const int MAXN = 1005; 7 int a[MAXN][MAXN]; 8 int x, y; 9 10 int main()11 {12 int i, j;13 i...
阅读全文
剑指Offer - 九度1372 - 最大子向量和(连续子数组的最大和)
摘要:剑指Offer - 九度1372 - 最大子向量和(连续子数组的最大和)2013-11-23 16:25题目描述:HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天JOBDU测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。你会不会被他忽悠住?输入:输入有多组数据,每组测试数据包括两行。第一行为一个整数n(0 msum则更新msum,如果su
阅读全文
剑指Offer - 九度1371 - 最小的K个数
摘要:剑指Offer - 九度1371 - 最小的K个数2013-11-23 15:45题目描述:输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。输入:每个测试案例包括2行:第一行为2个整数n,k(1 4 #include 5 #include 6 using namespace std; 7 8 int main() 9 {10 // min heap11 priority_queue, less > pq;12 vector vv;13 int n, k;14 int i, t...
阅读全文
剑指Offer - 九度1370 - 数组中出现次数超过一半的数字
摘要:剑指Offer - 九度1370 - 数组中出现次数超过一半的数字2013-11-23 03:55题目描述:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。输入:每个测试案例包括2行:第一行输入一个整数n(1 4 #include 5 using namespace std; 6 7 int main() 8 { 9 int tmp, ans;10 int c;11 int i, n;12 map mm; // mus...
阅读全文
剑指Offer - 九度1368 - 二叉树中和为某一值的路径
摘要:剑指Offer - 九度1368 -二叉树中和为某一值的路径2013-11-23 03:46题目描述:输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。输入:每个测试案例包括n+1行:第一行为2个整数n,k(1 4 #include 5 using namespace std; 6 7 void dfs(const int a[][3], const int &n, int r, int sum, int target, vector &path) 8 { 9 if(r n){10 ...
阅读全文
剑指Offer - 九度1367 - 二叉搜索树的后序遍历序列
摘要:剑指Offer - 九度1367 - 二叉搜索树的后序遍历序列2013-11-23 03:16题目描述:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。输入:每个测试案例包括2行:第一行为1个整数n(1 4 using namespace std; 5 6 bool check_postorder(const int a[], int left, int right) 7 { 8 if(a == NULL || left right){ 9 return false;10 ...
阅读全文
剑指Offer - 九度1362 - 左旋转字符串(Move!Move!!Move!!!)
摘要:剑指Offer - 九度1362 - 左旋转字符串(Move!Move!!Move!!!)2013-11-23 03:05题目描述:汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!输入:多组测试数据,每个测试数据包含一个字符序列S和非负整数K。其中S的长度不超过1000。输出:对应每个测试案例,输出新序列。样例输入:UDBOJ 4abba 1样例输出:JU
阅读全文
剑指Offer - 九度1361 - 翻转单词顺序
摘要:剑指Offer - 九度1361 - 翻转单词顺序2013-11-23 02:45题目描述:JOBDU最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?输入:每个测试案例为一行,表示一句英文句子。我们保证一个句子的单词数不会超过600,每个单词的长度也不会超过30。但是需要注意的是Fish
阅读全文
剑指Offer - 九度1354 - 和为S的连续正数序列
摘要:剑指Offer - 九度1354 - 和为S的连续正数序列2013-11-23 02:02题目描述:小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!输入:输入有多组数据。每组数据仅包括1个整数S(S= 1,2 * a + n - 1 >= n + 1 > n,于是n 4 #include 5
阅读全文
剑指Offer - 九度1351 - 数组中只出现一次的数字
摘要:剑指Offer - 九度1351 - 数组中只出现一次的数字2013-11-23 01:23题目描述:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。输入:每个测试案例包括两行:第一行包含一个整数n,表示数组大小。2 4 using namespace std; 5 6 int main() 7 { 8 int *a = NULL; 9 int n, i;10 int r1, r2;11 int r;12 int bit;13 14 while(scanf("%d", &n) == 1){15...
阅读全文
剑指Offer - 九度1350 - 二叉树的深度
摘要:剑指Offer - 九度1350 - 二叉树的深度2013-11-23 00:54题目描述:输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。输入:第一行输入有n,n表示结点数,结点号从1到n。根结点为1。 n left), max_depth(r->right)) + 1; 实际上由于树的节点个数一开始就指定了,所以直接用数组存数据,用下标当指针就行了,coding更方便。题目中节点数n的数据范围居然只有10,我都怀疑应该是10000或者1000错写成10了。 但有一点要注意,根节点如果不指定为1的话,是需要我们自己
阅读全文
剑指Offer - 九度1349 - 数字在排序数组中出现的次数
摘要:剑指Offer - 九度1349 - 数字在排序数组中出现的次数2013-11-23 00:47题目描述:统计一个数字在排序数组中出现的次数。输入:每个测试案例包括两行:第一行有1个整数n,表示数组的大小。1 4 using namespace std; 5 6 int bsearch_left(const int a[], int n, int target) 7 { 8 int ll, rr, mm; 9 10 if(a == NULL || n a[n - 1]){ 15 return -1; 16 } 17 1...
阅读全文
剑指Offer - 九度1283 - 第一个只出现一次的字符
摘要:剑指Offer - 九度1283 - 第一个只出现一次的字符2013-11-21 21:13题目描述:在一个字符串(1 4 using namespace std; 5 6 int main() 7 { 8 const int MAXN = 10005; 9 int i;10 char s[MAXN];11 int c[256];12 int min_index;13 const int EMPTY = -1;14 const int DUPLICATED = -2;15 16 while(scanf("%s", s) ...
阅读全文
剑指Offer - 九度1214 - 丑数
摘要:剑指Offer - 九度1214 - 丑数2013-11-21 21:06题目描述:把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。输入:输入包括一个整数N(1 4 using namespace std; 5 6 const int &mymin(const int &x, const int &y) 7 { 8 return (x = 1 && i <= MAXN){42 printf("%d\n"
阅读全文