上一页 1 ··· 12 13 14 15 16 17 18 19 20 ··· 58 下一页
  2013年11月3日
摘要: 题目:从上往下打印出二叉树的每个结点,同一层的结点按照从左到右的顺序打印。例如输入 8 / \ 6 10 /\ /\5 7 9 11输出8 6 10 5 7 9 11。二叉树结点的定义如下:struct BinaryTreeNode{ int m_nValue; BinaryTreeNode *m_pLeft; BinaryTreeNode *m_pRight;};从上到下打印二叉树的规律:每一次打印一个结点的时候,如果该结点有子结点,则把该结点的子结点放到一个队列的末尾。接下来到队列的头部取出最早进入队列的结点,重复前面的打印操作,直至队列中所有的结... 阅读全文
posted @ 2013-11-03 19:10 猿人谷 阅读(10349) 评论(0) 推荐(0)
摘要: 题目:输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按照递增排序的。例如下图中的链表1和链表2,则合并之后的升序链表如链表3所示。链表结点定义如下:struct ListNode{ int m_nValue; ListNode *m_pNext;}; 注:链表1和链表2是两个递增排序的链表,合并这两个链表得到升序链表为链表3.首先分析合并两个链表的过程。我们的分析从合并两个链表的头结点开始。链表1的头结点的值小于链表2的头结点的值,因此链表1的头结点将是合并后链表的头结点。如下图所示。链表1的头结点的值小于链表2的头结点的值,因此链表1的头结点是合并后链表的头结点。在剩余的结点 阅读全文
posted @ 2013-11-03 18:31 猿人谷 阅读(14105) 评论(0) 推荐(1)
摘要: 题目:写一个函数,输入n,求斐波那契(Fibonacci)数列的第n项。斐波那契(Fibonacci)数列定义如下:效率很低的解法:long long Fibonacci_Solution1(unsigned int n){ if(n 2时,第一次跳的时候就有两种不同的选择:一是第一次只跳1级,此时跳法数目等于后面剩下的n-1级台阶的跳法数目,即为f(n-1);另一种选择是第一次跳2级,此时跳法数目等于后面剩下n-2级台阶的跳法数目,即为f(n-2)。因此,n级台阶的不同跳法的总数f(n)=f(n-1)+f(n-2)。分析到这里,不难看出这实际上就是斐波那契数列了。#includeusi... 阅读全文
posted @ 2013-11-03 17:01 猿人谷 阅读(7393) 评论(0) 推荐(0)
摘要: 题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1.实现数组的旋转见左旋转字符串。和二分查找法一样,用两个指针分别指向数组的第一个元素和最后一个元素。我们注意到旋转之后的数组实际上可以划分为两个排序的子数组,而且前面的子数组的元素都大于或者等于后面子数组的元素。我们还可以注意到最小的元素刚好是这两个子数组的分界线。我们试着用二元查找法的思路在寻找这个最小的元素。首先我们用两个指针,分别指向数组的第一个元素和最后一个元素。按照题目旋转 阅读全文
posted @ 2013-11-03 16:13 猿人谷 阅读(2402) 评论(0) 推荐(0)
摘要: 题目:从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1,J为11,Q为12,K为13,而大、小王可以看成任意数字。可以把5张牌看成由5个数字组成的数组。大、小王是特殊的数字,我们不妨把它们定义为0,这样就能和其他扑克牌区分开来了。接下来我们分析怎样判断5个数字是不是连续的,最直观的方法是把数组排序。值得注意的是,由于0可以当成任意数字,我们可以用0去补满数组中的空缺。如果排序之后的数组不是连续的,即相邻的两个数字相隔若干个数字,但只要我们有足够的0可以补满这两个数字的空缺,这个数组实际上还是连续的。举个例子,数组排序之后为{0,1,3,4,5},在 阅读全文
posted @ 2013-11-03 10:55 猿人谷 阅读(2286) 评论(0) 推荐(0)
摘要: 一.qsort()函数功 能: 使用快速排序例程进行排序头文件:stdlib.h用 法: void qsort(void *base,int nelem,int width,int (*fcmp)(const void *,const void *));参数: 1 待排序数组首地址 2 数组中待排序元素数量 3 各元素的占用空间大小 4 指向函数的指针,用于确定排序的顺序qsort(即,quicksort)主要根据你给的比较条件给一个快速排序,主要是通过指针移动实现排序功能。排序之后的结果仍然放在原来数组中。其中qsort和compare的用法如下:void qs... 阅读全文
posted @ 2013-11-03 09:56 猿人谷 阅读(14841) 评论(0) 推荐(1)
  2013年11月2日
摘要: 题目:输入一个链表的头结点,从尾到头反过来打印出每个结点的值。链表结点定义如下:struct ListNode{ int m_nKey; ListNode *m_pNext;};解决这个问题肯定要遍历链表。遍历的顺序是从头到尾的顺序,可输出的顺序却是从尾到头。也就是说第一个遍历到的结点最后一个输出,而最后一个遍历到得结点第一个输出。这就是典型的“后进先出”,可以用栈实现这种顺序。每经过一个结点的时候,把该结点放到一个栈中。当遍历完整个链表后,再从栈顶开始逐个输出结点的值,此时输出的结点的顺序已经反转过来了。实现代码如下:void PrintListReverse(ListNode... 阅读全文
posted @ 2013-11-02 21:28 猿人谷 阅读(3235) 评论(0) 推荐(0)
  2013年11月1日
摘要: 题目:输入一个单向链表,输出该链表中倒数第k个结点。链表的倒数第0个结点为链表的尾指针。链表结点定义如下:struct ListNode{ int m_nKey; ListNode* m_pNext;};分析:为了得到倒数第k个结点,很自然的想法是先走到链表的尾端,再从尾端回溯k步。可是输入的是单向链表,只有从前往后的指针而没有从后往前的指针。因此我们需要打开我们的思路。既然不能从尾结点开始遍历这个链表,我们还是把思路回到头结点上来。假设整个链表有n个结点,那么倒数第k个结点是从头结点开始的第n-k-1个结点(从0开始计数)。如果我们能够得到链表中结点的个数n,... 阅读全文
posted @ 2013-11-01 22:07 猿人谷 阅读(800) 评论(0) 推荐(0)
摘要: 来源:http://blog.csdn.net/v_july_v/article/details/6322882题目描述:定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部,如把字符串abcdef左旋转2位得到字符串cdefab。请实现字符串左旋转的函数。指针翻转法 咱们先来看个例子,如下:abc defghi,若要让abc移动至最后的过程可以是:abc defghi->def abcghi->def ghiabc 如此,我们可定义俩指针,p1指向ch[0],p2指向ch[m];一下过程循环m次,交换p1和p2所指元素,然后p1++, p2++;。第一步,交换abc 阅读全文
posted @ 2013-11-01 11:58 猿人谷 阅读(1174) 评论(0) 推荐(0)
  2013年10月31日
摘要: 例如:已知数组a前半部分a[0,mid - 1],后半部分a[mid,num-1],现前半部分和后半部分均已排好序。要求:实现a数组的从小到大排序。空间复杂度为O(1). 1 #include 2 using namespace std; 3 4 void PrintArry(int v[],int len) 5 { 6 for(int i = 0; i left ; -- i) {24 v[i] = v[i-1];25 }26 v[left] = temp;27 28 //move the current ... 阅读全文
posted @ 2013-10-31 21:03 猿人谷 阅读(1073) 评论(0) 推荐(0)
上一页 1 ··· 12 13 14 15 16 17 18 19 20 ··· 58 下一页