面试笔试题
南极圈
唯算法和数据结构是程序的灵魂
展开
-
笔试题1——找到字符串中第一个只出现一次的那个字符
哈希表的应用,此题面试官主要考察的字符查找的时间效率,算法的时间复杂度为O(n),那么恭喜你通过此次笔试#define tableSize 256 //哈希表的大小,因为char占一个字节,最多能表示256个字符。char FindFirstCharAppearOnce(char* pString){ if (NULL == pString) //输入不合法原创 2017-07-20 15:24:09 · 3280 阅读 · 0 评论 -
笔试题6——数组中2个出现一次的数(其他2次)
void FindTwoDiff(int a[], int n, int N1, int N2) { int i, j, temp; temp = 0; for (i = 0; i < n; i++) temp ^= a[i]; //此时temp为2个不同数的异或值 //找第一个为1的位 for (j = 0; j < sizeof(int) * 8; j原创 2017-08-07 21:01:26 · 241 阅读 · 0 评论 -
笔试题5——数组中超过一半的数
在O(n)的时间内找出数组中超过一半的数,如:3 4 2 3 5 3 3,数字3超过半数bool g_b = false; //全局变量用来判断是不是数组中的数int MoreThanHalfNum(int a[], int len){ bool b = false; if (a == NULL || len <= 0) { g_b = true; ret原创 2017-08-01 09:50:26 · 266 阅读 · 0 评论 -
笔试题7——替换数组中的空格
给定一数组,将 空格 替换成 %20 ,要求时间复杂度为O(n)void ReplaceBlank(char string[], int length){ if (string == NULL && length <= 0) return; int oldlength = 0; int NumOfBlank = 0; int i = 0; while (string[原创 2017-08-08 09:54:34 · 368 阅读 · 0 评论 -
笔试题8——二进制中1的个数
方法1:int BitCount(unsigned int n){ int iCount = 0; while (n > 0) { if ((n & 1) == 1) ++iCount; n >>= 1; //n右移一位 } return iCount;}方法2:int BitCount(unsigned int n){原创 2017-08-08 20:46:12 · 252 阅读 · 0 评论 -
笔试题2——判断链表是否有环,若有则返回环的第一个交点
链表是常有的数据结构,也是笔试、面试常客如何判断一个链表是否有环;若有环,则环的第一个交点;找链表的倒数第k个节点;都是快慢指针的应用;下面给出这三个的实现方法(1)如何判断一个链表是否有环bool IsListR(LinkList* head){ LinkList*pS = head; //慢指针 LinkList*pF = head原创 2017-07-25 10:21:35 · 363 阅读 · 0 评论 -
笔试题3——给定一个整形数组,使得奇数在偶数前面
这道题是厦门大学某一年的考研题,也是一道笔试时经常考的题目这道题类似于快速排序 第一趟排玩的结果,将数组分成前后两部分;我们用这种相似的方法解这道算法题void OddBeforeEven(int a[], int iLength){ if (a == NULL || iLength <= 1) return; int iStart = 0; int iEn原创 2017-07-25 21:11:18 · 538 阅读 · 0 评论 -
笔试题4——数组中第二大的数
求数组中第二大的数,要求时间复杂度为O(n),即遍历一遍const int MinN = -32767;int FindSecMax(int data[], int iCount){ int iMaxNum = data[0]; int iSecMax = MinN; for (int i = 1; i < iCount; i++) { if (data[i] > iM原创 2017-07-27 16:58:55 · 357 阅读 · 0 评论