2013年3月27日

摘要: 在字符串中找出第一个只出现一次的字符。(35)对公司员工的年龄进行统计排序。计数排序(适用于有边界的数值统计)。1、思路: 因为字符只有256个数字,设置一个hashtable只有256*4=1K字节,这样时间复杂度只有O(n)。 FirstNotRepeatingChar 1 char FirstNotRepeatingChar(char* pString) 2 { 3 if(pString == NULL) 4 return '\0'; 5 6 const int tableSize = 256; 7 unsigned int hashTable... 阅读全文
posted @ 2013-03-27 14:41 月moon鸟 阅读(186) 评论(0) 推荐(0) 编辑
摘要: 快排的递归版本和非递归版本。数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。(29)输入n个数,找出其中最小的k个数。(30)1、思路: 递归版本:首先随机选定分割数,对数组中小于该分割数的放在左侧,大于该分割数的放在右侧。递归处理左侧和右侧的数字。QuickSort 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <exception> 4 5 void PrintArray(int* data, int length) 6 { 7 for (int i = 0; i < le 阅读全文
posted @ 2013-03-27 14:32 月moon鸟 阅读(293) 评论(0) 推荐(0) 编辑
摘要: 请快速写出二分查找的代码。把一个数组最开始的若干个元素搬到数组的末尾,叫数组的旋转。输入一个递增排序的数组的一个旋转,输出数组的最小元素。(8)统计一个数字在排序数组中出现的次数。(38)1、思路: 要求输入数组是排序的,这样二分查找的算法是log(n)。BinarySearch 1 int BinarySearch(int data[], int length, int key) 2 { 3 int low, high, mid; 4 low = 0; 5 high = length - 1; 6 while (low <= high) 7 { 8 ... 阅读全文
posted @ 2013-03-27 14:29 月moon鸟 阅读(176) 评论(0) 推荐(0) 编辑
摘要: 输入一个整数,输出该数二进制表示中1的个数。附加题:判断一个数是否是2的幂。一个整数数组里除了两个数字以外,其他数字都出现两次。请找出只出现一次的数字,要求时间复杂度O(n),空间复杂度O(1)。写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/即加减乘除四则运算符号。1、思路: 常规方法:逐位和1做与运算,看是否为1。如果右移位,当符号位为1时,会陷入死循环(高位补1)。所以选择左移位,当标志位为0时说明所有位都移动完成。 巧妙方法:当n-1时,与n相比,最右边的1变为0,再右侧的0变为1。所以n&(n-1)不为0,则计数加1,有几个1就有几次循环。 判断2的幂:用二进 阅读全文
posted @ 2013-03-27 11:35 月moon鸟 阅读(235) 评论(0) 推荐(0) 编辑

导航