随笔分类 -  careercup

摘要:题目你有10亿个url,每个url对应一个非常大的网页。你怎么检测重复的网页?解答网页大,数量多,要把它们载入内存是不现实的。 因此我们需要一个更简短的方式来表示这些网页。而hash表正是干这事的。 我们将网页内容做哈希,而不是url,这里不同url可能对应相同的网页内容。将每个网页转换为一个哈希值... 阅读全文
posted @ 2015-04-23 10:17 Jessica程序猿 阅读(369) 评论(0) 推荐(0)
摘要:题目有一个数组,里面的数在1到N之间,N最大为32000.数组中可能有重复的元素(即有的元素 存在2份),你并不知道N是多少。给你4KB的内存,你怎么把数组中重复的元素打印出来。解答我们有4KB的内存,一共有4 * 210* 8位,大于32000,所以我们可以用Bit Map 来做这道题目。题目很简... 阅读全文
posted @ 2015-04-23 09:42 Jessica程序猿 阅读(247) 评论(0) 推荐(0)
摘要:题目给你一个文件,里面包含40亿个整数,写一个算法找出该文件中不包含的一个整数, 假设你有1GB内存可用。如果你只有10MB的内存呢?解答我们先来做个算术题,40亿个整数大概有多大?40 * 10^8 * 4B = 16GB (大约值,因为不是按照2的幂来做单位换算)这个明显无法一次性装入内存中。但... 阅读全文
posted @ 2015-04-23 09:18 Jessica程序猿 阅读(313) 评论(0) 推荐(0)
摘要:题目给你一个排好序的并且穿插有空字符串的字符串数组,写一个函数找到给定字符串的位置。例子:在字符串数组 [“at”, “”, “”, “”, “ball”, “”, “”, “car”, “”,“”, “dad”, “”, “”] 中找到”ball”,返回下标4.例子:在字符串数组 [“at”, “... 阅读全文
posted @ 2015-04-22 23:28 Jessica程序猿 阅读(980) 评论(0) 推荐(0)
摘要:题目写一个函数对字符串数组排序,使得所有的变位词都相邻。解答首先,要弄清楚什么是变位词。变位词就是组成的字母相同,但顺序不一样的单词。 比如说:live和evil就是一对变位词。OK,那么这道题目的意思就很清楚了, 它并不要求我们将字符串数组中的字符串按字典序排序,否则我们直接调用STL中的sort... 阅读全文
posted @ 2015-04-22 22:50 Jessica程序猿 阅读(738) 评论(0) 推荐(0)
摘要:题目原文:写程序交换一个整数二进制表示中的奇数位和偶数位,用尽可能少的代码实现。 (比如,第0位和第1位交换,第2位和第3位交换…)解答这道题目比较简单。分别将这个整数的奇数位和偶数位提取出来,然后移位取或即可。代码如下:int swap_bits(int x){ return ((x & 0... 阅读全文
posted @ 2015-04-22 21:16 Jessica程序猿 阅读(715) 评论(0) 推荐(0)
摘要:题目给定一个字符串类型(string)表示的小数,打印出它的二进制表示。 如果这个数无法精确地表示为二进制形式,输出”ERROR”。解答整数部分通过不断地对2取余然后除以2来得到其二进制表示, 或是不断地和1按位与然后除以2得到其二进制表示。 小数部分则通过不断地乘以2然后与1比较来得到其二进制表示... 阅读全文
posted @ 2015-04-22 21:01 Jessica程序猿 阅读(773) 评论(0) 推荐(0)
摘要:18.9 随机生成一些数字并传入某个方法。编写一个程序,每当收到新字符数字时,找出并记录中位数。类似:设计一个数据结构,包括两个函数,插入数据和获得中位数解法:一种解法是使用两个优先级堆:一个大根堆,存放小于中位数的值,以及一个小根堆存放大于中位数的值。这会将所有元素大致分为两半,中间的两个元素位于... 阅读全文
posted @ 2015-03-24 16:30 Jessica程序猿 阅读(238) 评论(0) 推荐(0)
摘要:18.7 给定一组单词,编写一个程序,找出其中的最长单词,且该单词由这组单词中的其他单词组合而成。解法:原题给定字符串,以及一个字典,判断字符串是否能够拆分为字段中的单词。例如,字段为{hello,world},字符串为hellohelloworld,则可以拆分为hello,hello,world,... 阅读全文
posted @ 2015-03-24 15:48 Jessica程序猿 阅读(287) 评论(0) 推荐(0)
摘要:18.6 设计一个算法,给定10亿个数字,找出最小的100万个数字。假定计算机内存足以容纳全部10亿个数字。解法:方法1:排序按升序排序所有的元素,然后取出前100万个数,时间复杂度为O(nlog(n))方法2:大顶堆我们可以使用大顶堆来解题。首先,为前100万个数字创建一个大顶堆然后,遍历整个数列... 阅读全文
posted @ 2015-03-24 12:22 Jessica程序猿 阅读(148) 评论(0) 推荐(0)
摘要:18.5 有个内含单词的超大文本文件,给定任意两个单词,找出在这个文件中这两个单词的最短距离(也即相隔几个单词)。有办法在O(1)时间里完成搜索操作吗?解法的空间复杂度如何?解法1:我们假设单词word1和word2谁在前谁在后无关紧要。要解决此题,我们需要遍历一次这个文件。在遍历期间,我们会记下最... 阅读全文
posted @ 2015-03-24 11:46 Jessica程序猿 阅读(921) 评论(0) 推荐(0)
摘要:18.2 编写一个方法,洗一副牌。要求做到完美洗牌,换言之,这幅牌52!种排列组合出现的概率相同。假设给定一个完美的随机发生器。解法:假定有个数组,含有n个元素,类似如下:[1][2][3][4][5]利用简单构造法,我们不妨先问自己,假定有个方法shuffle(...)对n-1个元素有效,我们可以... 阅读全文
posted @ 2015-03-24 09:25 Jessica程序猿 阅读(274) 评论(0) 推荐(0)
摘要:18.1 编写一个函数,将两个数字相加,不得使用+或其他算术运算符。int add(int a,int b){ if(b==0) return a; int sum=a^b; int carry=a&b)<<1; return add(sum,carry);} 阅读全文
posted @ 2015-03-24 09:13 Jessica程序猿 阅读(148) 评论(0) 推荐(0)
摘要:17.12 设计一个算法,找出数组中两数之和为指定值的所有整数对。解答时间复杂度O(n)的解法我们可以用一个哈希表或数组或bitmap(后两者要求数组中的整数非负)来保存sum-x的值, 这样我们就只需要遍历数组两次即可找到和为指定值的整数对。这种方法需要O(n) 的辅助空间。如果直接用数组或是bi... 阅读全文
posted @ 2014-12-13 15:03 Jessica程序猿 阅读(240) 评论(0) 推荐(0)
摘要:17.11 给定rand5(),实现一个方法rand7().也即,给定一个产生0到4(含)随机数的方法,编写一个产生0到6(含)随机数的方法。解法:这个函数要正确实现,则返回0到6之间的值,每个值的概率必须为1/7.1 第一个尝试(调用次数固定)第一个尝试时,我们可能会想产生出0到9之间的值,然后再... 阅读全文
posted @ 2014-12-13 12:17 Jessica程序猿 阅读(197) 评论(0) 推荐(0)
摘要:17.9 设计一个方法,找出任意指定单词在一本书中的出现频率。解法:1 单次查询遍历这本书的每个单词,计算给定单词出现的次数。时间复杂度O(n),我们无法继续优化它,因为书中的每个单次都需要访问一次。当然,如果我们假设书中的单词是均匀分布的,那我们就可以只统计前半本书某个单次出现的次数,然后乘以2;... 阅读全文
posted @ 2014-12-13 10:28 Jessica程序猿 阅读(194) 评论(0) 推荐(0)
摘要:17.8 给定一个整数数组(有正数和负数),找出总和最大的连续序列,并返回总和。解法:就是求连续子序列的和最大,不过存在一个问题:假设整个数组都是负数,怎么样才是正确的行为呢?看看这个简单的数组{-3,-10,-5},一下答案每个都可以说的通:-3(假设子序列不能为空)0(子序列的长度为空)INT_... 阅读全文
posted @ 2014-12-13 09:56 Jessica程序猿 阅读(225) 评论(0) 推荐(0)
摘要:17.7 给定一个整数,打印该整数的英文描述(例如“One Thousand,Two Hundred Thirty Four”)。解法:举个例子,在转换19 323 984时,我们可以考虑分段处理,没三位转换一次,并在适当的地方插入“thousand”(千)和“million”(百万)。也即,con... 阅读全文
posted @ 2014-12-13 09:45 Jessica程序猿 阅读(175) 评论(0) 推荐(0)
摘要:17.6 给定一个整数数组,编写一个函数,找出索引m和n,只要将m和n之间的元素排好序,整个数组就是有序的。注意:n越小越好,也就是说,找出符合条件的最短序列。解法:开始解题之前,让我们先确认一下答案会是什么样的。如果要找的是两个索引,这表明数组中间有一段有待排序,其中数组开头和末尾部分是排好序的。... 阅读全文
posted @ 2014-12-12 11:09 Jessica程序猿 阅读(231) 评论(0) 推荐(0)
摘要:17.5写一个函数来模拟游戏。游戏规则如下:4个槽,里面放4个球,球的颜色有4种,红(R ),黄(Y),绿(G),蓝(B)。比如, 给出一个排列RGGB,表示第一个槽放红色球,第二和第三个槽放绿色球,第四个槽放蓝色球。你要去猜这个排列。比如你可能猜排列是:YRGB。当你猜的颜色是正确的,位置也是正确... 阅读全文
posted @ 2014-12-12 08:31 Jessica程序猿 阅读(175) 评论(0) 推荐(0)