摘要: 1、实现一个函数,对一个正整数n,算得到1需要的最少操作次数。操作规则为:如果n为偶数,将其除以2;如果n为奇数,可以加1或减1;一直处理下去。例子:func(7) = 4,可以证明最少需要4次运算n = 7n-1 6n/2 3n-1 2n/2 1要求:实现函数(实现尽可能高效) int func(unsign int n);n为输入,返回最小的运算次数。给出思路(文字描述),完成代码,并分析你算法的时间复杂度。答:[cpp]· int func(unsigned int n)· {· if(n == 1)· return 0;· if(n % 阅读全文
posted @ 2012-12-29 14:08 lscheng 阅读(343) 评论(0) 推荐(0) 编辑
摘要: 问题描述:(百度面试题)搜索引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来,每个查询串的长度为0-255字节。假设目前有1000万个记录,除去重复后,不超过300万个。一个查询串的重复度越高,说明查询它的用户越多,也就是越热门,请你统计最热门的10个查询串,要求内存不能超过1G。问题解析:【分析】:要统计最热门查询,首先就是要统计每个query出现的次数,然后根据统计结果,找出Top 10。所以我们可以根据该思路分两步来设计该算法。第一步:Query统计(算法一)直接排序法首先我们能想到的就是排序,首先对这个日志里面的所有Query进行排序,然后再遍历排好序的Query,统计每个Q 阅读全文
posted @ 2012-12-29 14:06 lscheng 阅读(2586) 评论(0) 推荐(0) 编辑
摘要: 输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。例如输入整数22 和如下二元树 10 / \ 5 12 / \ 4 7则打印出两条路径:10, 12 和10, 5, 7。思路:1、当访问到某一节点时,把该结点的值添加到当前和变量,且把该结点压入栈中。2、若结点为叶子结点,且当前和变量==期望的和,则打印栈中的结点值,即为所需的路径。3、若结点不是叶子结点,继续访问它的左孩子结点,访问它的右孩子结点。4、删除该结点。包括从当前和变量中减去结点值,从栈中... 阅读全文
posted @ 2012-12-29 13:54 lscheng 阅读(223) 评论(0) 推荐(0) 编辑