随笔分类 -  面试题

摘要:题目:输入两个递增排序的链表,合并这两个链表并使新链表中的结点依然是按照递增排序的。链表结点定义如下:1 struct ListNode2 {3 int m_nValue;4 ListNode* m_pNext;5 };思路:利用递归。每一次把具有较小值的结点赋给MergeHead,MergeHead->m_pNext是合并剩下链表所返回的头结点。 1 ListNode* MergeSortedList(ListNode *pHead1, ListNode *pHead2) 2 { 3 if (pHead1 == NULL) 4 { 5 retu... 阅读全文
posted @ 2013-05-14 16:48 hust_枫 阅读(277) 评论(1) 推荐(0) 编辑
摘要:搜狐笔试题思路: 遍历数组一次,用ret 记录最大的和,sum则将每一个元素加起来;在每一步中若sum < 0,则将sum赋值为0;若sum > 0,则和ret比较,保持ret在每一步中的最大性。最后返回ret即可。code: 1 int find_max_sum(int array[], int n) 2 { 3 //ret 记录maxsum 4 int ret = 0; 5 int sum = 0; 6 7 for (int i = 0; i < n; ++i) 8 { 9 sum += array[i];10 if... 阅读全文
posted @ 2013-05-11 15:02 hust_枫 阅读(148) 评论(0) 推荐(0) 编辑
摘要:前面讲到对一系列的区间合并,里边定义了结构1 struct myDataType2 {3 unsigned int a;4 unsigned int b;5 bool flag;6 };具体参考:http://www.cnblogs.com/ivorfeng/archive/2013/04/30/3052022.html那如果是对IP区间的合并呢?首先先回顾一下关于IP的知识。一个IP地址由32bit组成,形式上为x.x.x.x,每一个x的范围是0~255,即1Byte = 8 bit。也就是说,对于每一个IP地址,我们都可以将其看成是32bit的数,对应于计算机里的u... 阅读全文
posted @ 2013-05-05 16:32 hust_枫 阅读(645) 评论(0) 推荐(1) 编辑
摘要:有两个相同的栈,一个里面放着自大到小排列的数,栈顶的数最小,另一个栈是空的。不允许利用其它的数据结构,只能利用这两个栈,要求把第一个栈里的数字反过来,从小到大排列,结果还放在原来的那个栈里面。思路:假设stackA存放数,stackB为辅助栈。stackA元素个数为N。第1次操作:先取stackA栈顶元素,记为tmp,然后把剩余N-1个元素转移到stackB中,接着把tmp和stackB的N-1个元素依次压入stackA中,这样完成了stackA原栈顶的反转。第2次操作:先取stackA栈顶元素,记为tmp,因为栈底有一个元素已完成反转,故只需要把剩余的N-2个元素转移到stackB,接着把t 阅读全文
posted @ 2013-05-03 21:03 hust_枫 阅读(866) 评论(0) 推荐(0) 编辑
摘要:Question: Write code to remove duplicates from an unsorted linked list.( from Cracking the coding interview)链表使用以下结构1 struct LinkListNode2 {3 int key;4 LinkListNode *next;5 };解法一:使用hash,即要求缓冲区。遍历链表,若不含该节点值,则加入hash表,否则跳过该节点。C++好像没有直接的hashtable~~实现有待学习!解法二:不使用buffer,使用两个指针,分别指向当前节点pCur和其前一节点pP... 阅读全文
posted @ 2013-05-01 20:25 hust_枫 阅读(927) 评论(0) 推荐(0) 编辑
摘要:题目:用两个栈实现一个队列。队列的声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入元素和在队列头部删除节点的功能。 1 template <typename T>class CQueue 2 { 3 public: 4 CQueue(void); 5 ~CQueue(void); 6 7 void appendTail(const T& element); 8 T deleteHead(); 9 10 private:11 stack<T> stack1;12 stack<T> stack2;13 ... 阅读全文
posted @ 2013-05-01 15:08 hust_枫 阅读(329) 评论(0) 推荐(1) 编辑
摘要:题目:请实现一个函数,把字符串中的每个空格替换成“%20”。例如输入“We are happy.”,则输出“We%20are%20happy.”。在原来的字符串上替换,并保证输入的字符串后面有足够的空余内存。思路:解法一:最容易想到的就是当遇到空格时,将后面的字符向后面移动2位。此方法的时间复杂度为O(N^2)。解法二: 首先遍历字符串,统计字符串中的空格数目,计算新的字符长度 newLen = oldLen + 2 * 空格数; 依次从字符串后面开始复制,分别用p1,p2指向旧新字符串的末尾,当遇到空格时,依次赋值‘0’,‘2’,‘%’;当p1 == p2时,过程终止(p1,p2之前的都.. 阅读全文
posted @ 2013-04-30 19:00 hust_枫 阅读(325) 评论(0) 推荐(0) 编辑
摘要:题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。例如,数组为1 2 8 92 4 9 124 7 10 136 8 11 15如果在数组中查找数字9,则返回true;如果查找数字20,则返回false。思路:元素是分别按行按列递增,但是每一行(列)的元素不一定都比前一行(列)元素大。因此,我们要利用元素的排列特点,按照一定的规律去寻找元素。由于已经知道每一列是从上到下递增排序,我们先选左下角的第一个元素,即第一列的最大值,作为起始元素(记为p=a[row][col])比较 阅读全文
posted @ 2013-04-30 17:16 hust_枫 阅读(209) 评论(0) 推荐(0) 编辑
摘要:题目:现有N个区间[a1,b1],...,[aN,bN],若区间有重叠则合并,要求输出最终的区间结果。(合并后有多个区间则输出多个区间)sample:现有区间[4, 9], [8, 10], [15, 20], [1, 16], 合并后的区间为[1, 20]。解题思路:定义数据结构:1 struct myDataType2 {3 unsigned int a;4 unsigned int b;5 bool flag;6 };接着按区间左端点将区间排序,再从前往后依次判断相邻两区间(假设分别为区间p1,p2)是否有重叠(Overlap),若有重叠,则更新后一个区间(p2)... 阅读全文
posted @ 2013-04-30 16:18 hust_枫 阅读(1041) 评论(0) 推荐(1) 编辑

点击右上角即可分享
微信分享提示