经典面试编程题
文章平均质量分 78
dangzhileiqaz
这个作者很懒,什么都没留下…
展开
-
(10)寻找满足和为定值的两个或多个数
程序员编程艺术:第五章、寻找和为定值的两个或多个数 作者:July,yansha,zhouzhenren。 致谢:微软100题实现组,编程艺术室。 微博:http://weibo.com/julyweibo 。 出处:http://blog.csdn.net/v_JULY_v 。 wiki:http://tctop.wikispac转载 2013-11-18 18:40:11 · 857 阅读 · 0 评论 -
(13)和为s的连续正数序列
题目描述:输入一个正数sum,打印出所有和为s的连续正数序列;序列至少包括2个数;例如sum = 9 = 2 + 3 + 4 = 4 + 5 , 则序列为[2 , 3 , 4] ,[4 , 5];思路:假设所求序列为:[small............big];small为最小值,big为最大值;且small 若CurrentSum == sum:直接打印满足的序列;原创 2013-11-20 10:16:12 · 598 阅读 · 0 评论 -
(11)求五百万内的亲和数
第六章、亲和数问题--求解500万以内的亲和数作者:上善若水、July、yansha。出处:http://blog.csdn.net/v_JULY_v 。前奏 本章陆续开始,除了继续保持原有的字符串、数组等面试题之外,会有意识的间断性节选一些有关数字趣味小而巧的面试题目,重在突出思路的“巧”,和“妙”。本章亲和数问题之关键字,“500万”,“线性复杂度”。转载 2013-11-19 09:28:07 · 834 阅读 · 0 评论 -
(8)连续子数组的最大和
题目描述:输入一个整型数组,元素有正数,也有负数。数组中一个或者多个组成一个子数组,求所有子数组中的最大值为多少?举例:{1 , -2 , 3 ,10 , -4 ,7 ,2 ,-5} ,那么最大子数组为{3 ,10 , -4 , 7 , 2}。最大值为18;思路一:穷举法遍历所有连续子数组,比较找出其中子数组值最大的一个;MaxSum[i .....j] 为数组data中第i个到第原创 2013-11-13 21:09:28 · 568 阅读 · 0 评论 -
(2)斐波那契数列及其应用跳台阶问题
斐波那契公式:递归实现:输入参数n类型:unsigned int函数体:if : n == 0 -->返回 0if : n == 1 -->返回1if : n >= 2 --> 返回function(n - 1) + function(n - 2)分析:随着n 的增大,重复计算同一个数的次数明显增多,例如求f(9)会用到f(6);求f(8) 和f(7) 同样原创 2013-11-02 19:28:20 · 738 阅读 · 0 评论 -
(5)数组中的逆序对数
逆序对:A[1,2......n]是一个包含不同数的数组,若当 i A[j] ,则称(A[i] , A[j])为逆序对(InversonPair);思考一:何种情况下,数组A[]中含有的逆序对数最多?逆序对数为多少?当A是完全逆序的数组时,含有最多的逆序对 , 即A = {n , n- 1 , n-2 , ......, 2 , 1};以1结尾的逆序对(A[i] , 1)个数为 n原创 2013-11-08 20:25:38 · 769 阅读 · 0 评论 -
(6)翻转句子中单词的顺序
文章出处:http://zhedahht.blog.163.com/blog/static/254111742007289205219/作者:何海涛题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。例如输入“I am a student.”,则输出“student. a am I”。转载 2013-11-11 18:50:24 · 560 阅读 · 0 评论 -
(3)打印1到最大的n位数
题目描述:输入数字n,顺序打印出1到n位的十进制最大数,例如n = 2,即打印出1 , 2 , 3 ...... 97 , 98 , 99;思路一:最大n位十进制数:999.......9999 ,共有n位;易知:其为()循环从1--输出;但是这里的为int类型,或者long long 类型;但是若n很大时,极易造成溢出;且此题考查的很有可能就是应聘者对大数问题解决办法;思原创 2013-11-06 20:41:27 · 784 阅读 · 0 评论 -
(9)求旋转数组中的最小数值
题目描述:将一个数组最开始的若干元素搬到数组的末尾,称之为旋转数组;输入一个增序数组的旋转数组例如{3,4,5,1,2} 其旋转数组中的最小数值为{1};思路一:顺序遍历数组中的每一个元素,找出最小值;时间复杂度O(n);思路二:旋转数组有增序数组变换而来,可以考虑二分查找 , 其复杂度为O(logN);但是旋转数组的增序排列是分为两部分的,而且我们的目标:原创 2013-11-14 20:17:39 · 690 阅读 · 0 评论 -
(16)替换空格字符
题目描述:请实现一个函数,把字符串中的每个空格替换成“%20”,例如输入的字符串“we are happy.”,则替换结果为:“we%20are%20happy.”思路一:从头到尾扫描字符串,遇到空格时,将其后面的字符全部后移两个字节,再将包括空格在内的三个字节赋值为:“%20”;若字符串长度为n,那么每次遇到一个空格,移动字符数为O(n),总的时间复杂度为O(n*n);思路二原创 2013-11-24 20:00:00 · 440 阅读 · 0 评论 -
(14)第一个只出现一次的字符
题目描述:在给定的一个字符串中,找出第一次出现且个数为1的字符;原创 2013-11-22 17:05:18 · 571 阅读 · 0 评论 -
(7)左旋字符串
原作者:v_JULY_v:http://blog.csdn.net/v_july_v/article/details/6322882 何海涛--《剑指offer》感谢上述作者;我仅仅是将其一些思路重新自己实现了一遍,稍作整理,以便经常温习用。题目描述:字符串左旋操作:将一个字符串前面的若干个字符移动到字符串尾部;例如字符串原创 2013-11-13 14:55:40 · 606 阅读 · 0 评论 -
(4)统计一个数字,在排序数组中出现的次数
题目描述:统计一个数字K,在排序数组中出现的次数;例如:数组data{1,2,2,3,3,3,3,4} , k = 3 则其出现次数应该为4;思路一:顺序扫描,若data[i] = k , 计数Number ++;时间复杂度为O(n);思路二:耗费时间主要还是在查找k上,由于数组已经排好序,可以利用二分查找算法 , 进行查找;若K= 3,又因为3连续出现;原创 2013-11-07 20:13:13 · 849 阅读 · 0 评论 -
(1)字符串全排列 / 组合
题目描述:输入一个字符串,打印出该字符串的全部排列;例如:字符串:abc 全排列:(abc , acb) , (bac , bca) , (cba , cab);解题思路:递归实现:从字符串中“依次”选择一个字符作为“首字符”,并在该“首字符”前提下,对剩余字符进行递归全排列处理;“依次”:即始终在“初始字符串”的前提下,后面的字符分别于第一个字符交换;字符串a原创 2013-11-01 20:13:07 · 658 阅读 · 0 评论 -
(12)调整数组,使奇数位于偶数之前;
题目描述:输入一个整数数组,调整该数组中元素的顺序,使所有奇数位于数组前半部分,偶数位于后半部分;思路一:从数组的首元素开始扫描,若遇到偶数,将其拿出,并将该元素后面的元素一次迁移,这样挪完后,数组末尾空出移位,则再将偶数元素赋予该空位;这样没遇到一个偶数元素,需要移动次数为O(n),假设数组元素个数为n;则时间复杂度为O(n*n);思路二:设置两个指针pBegin原创 2013-11-19 20:37:22 · 736 阅读 · 0 评论 -
(15)数组中出现次数超过一半的数字
题目描述:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如数组data{1,2,3,2 ,2 , 2 ,5 , 4 , 2};数组长度为9,其中2出现5次,超过数组长度的一半,因此输出为2;思路一:若数组是无序的,我们可以利用排序算法将数组排序,那么有根据数组的特点,在下标[N / 2]处即为所求;{1 ,2 ,2 ,2 ,2 ,2 ,3 ,4 ,5}--->原创 2013-11-22 20:21:29 · 597 阅读 · 0 评论