
算法和数据结构
陆业聪
腾讯高级客户端工程师。这里有大前端的经验分享和技术干货。关注公众号“陆业聪”,获取最新技术文章。
展开
-
给定一个非常长的字节序列如何高效的统计1的个数
题目:“给定一个非常长的字节序列(假设有十亿或万亿),如何高效的统计1的个数(也就是说,在整个序列中有多少个位的值为1?)”解答:统计一个字节序列中1的个数,我首先想到的是最简单,把这个数每次右移一位,然后与0x01逻辑与进行统计,相当于总共将真个字节序列遍历了一遍。然而仔细想想,一个十亿或万亿的字节序列,能存到一个数(或称为变量)中?必然不可以,因此这是陷阱所在。深入思考转载 2015-02-01 13:02:35 · 1627 阅读 · 0 评论 -
实现约瑟夫环
java实现import java.util.Iterator;import java.util.LinkedList;import java.util.List;public class ListCircle { static final int X = 5; public static void main(String[] args){ List list = new L原创 2015-04-18 23:48:01 · 466 阅读 · 0 评论 -
2013年大众点评网的一道程序笔试题
输入任意正整数n,统计1到n中1出现的次数,比如输入12,其中1,10,11,12出现了5次。我知道的两种c++实现算法如下,写在一起比较起来方便: #include #include #include #include using namespace std;void main(){ clock_t start1,start2,end1,end原创 2013-05-30 16:32:56 · 1279 阅读 · 0 评论 -
判断点在多边形内还是外部
改进的弧长法:摘自网上有关"弧长法"的介绍:"弧长法要求多边形是有向多边形,一般规定沿多边形的正向,边的左侧为多边形的内侧域.以被测点为圆心作单位圆,将全部有向边向单位圆作径向投影,并计算其中单位圆上弧长的代数和,若代数和为0,则点在多边形外部;若代数和为2π,则点在多边形内部;若代数和为π,则点在多边形上."根据上面的介绍,其实弧长法就是转角法,但它的改进方法比较比较厉害:将坐标转载 2013-09-18 15:54:32 · 1044 阅读 · 0 评论 -
索引优先队列的实现
/************************************************************************* * Compilation: javac IndexMinPQ.java * Execution: java IndexMinPQ * * Minimum-oriented indexed PQ implementation u转载 2015-01-07 11:31:44 · 1425 阅读 · 0 评论 -
Kendall's tau
Kendall's tau是数学统计中一个常用的系数,用来描述两个序列的相关系数。如果两个序列完全一致,则Kendall's tau值为1,两个毫不相关的序列的Kendall's tau值为0,而两个互逆的序列的Kendall's tau系数为-1.具 体的计算方式为: 1 - 2 * symDif / (n * (n -1)),其中n为排列的长度(两个序列的长度相同),symDif为对称距离转载 2015-01-07 12:32:23 · 11747 阅读 · 1 评论 -
蒲丰投针概率问题
蒲丰投针问题【问题背景】 蒲丰(C.Buffon)投针实验是运用实验法研究几何概率的典型范例. 1777年的一天,蒲丰邀请许多宾朋来家做客,并参观他的实验.他事先在白纸上画好了一条条等距离的平行线,然后将纸铺在桌上,又拿出一些质量均匀、长度为平行线间距离之半的小针,请客人把针一根根随便扔到纸上,蒲丰则在一旁计数.结果,共投了2122次,其中与任一平行线转载 2014-07-30 15:55:44 · 12416 阅读 · 0 评论 -
C语言字符串反转函数
找工作前写了篇blog说要做些常见的笔试面试题,像单链表反转啊字符串反转啊之类的题目,但是只写了一篇单链表反转就没再继续写下去,因为觉得实在没什么好写的,不过都是一些简单的指针操作罢了,但是还是有很多新手问这个问题,而且我在腾讯二面的时候也被要求实现这个函数,那我也写一篇blog介绍一下字符串反转吧。 C语言中所谓的字符串不过是字符数组,后跟一个0x00字符标识结尾,所以反转起来很容转载 2014-08-03 16:01:08 · 720 阅读 · 0 评论 -
寻找一个字符串中连续出现次数最多的子串
一、生成后缀数组搜索算法描述首先获得后缀数组,然后1.第一行第一个字符a,与第二行第一个字符b比较,不等,则2.第一行前两个字符ab,与第三行前两个字符cb比较,不等,则3.第一行前三个字符abc,与第四行前三个字符bcb比较,不等,则4.第一行前四个......上述过程就相当于在原始字符串中,第一趟,a与b比较,ab与cb比较,abc与bcb比较,abcb与cbc转载 2014-12-27 10:11:17 · 1657 阅读 · 0 评论 -
随机抽样问题(蓄水池问题Reservoir Sampling)
随即抽样问题: 要求从N个元素中随机的抽取k个元素,其中N无法确定。 是在 《计算机程序设计与艺术》 中看到的这个题目,书中只给出了解法,没给出证明。 解决方法是叫Reservoir Sampling (蓄水池抽样) Init : a reservoir with the size: k转载 2014-06-06 13:33:00 · 861 阅读 · 0 评论 -
《编程之美》之:"程序理解和时间分析"与JOJ 2042
这是《编程之美》的2.20题目,给出一段C#代码,要求不用电脑,理解程序并回答问题。下面是从C#代码中改写成的C++代码:#include #include using namespace std;int main() { int rg[] = {2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,转载 2014-12-12 16:56:03 · 572 阅读 · 0 评论 -
面试例题:输入n,求一个n x n矩阵,规定矩阵沿45度递增,形成一个zigzag数组(JPEG编码里取像素数据的排列顺序),请问如何用C++实现? (中国台湾著名硬件公司2007年11月面试题)
//题目:输入n 求一个n*n的矩阵,规定矩阵沿45度角线递增, //形成一个zigzag数组,请问如何用C++实现 //如图: // //Please Input The Number! //8 // 0 1 5 6 14 15 27 28 // 2 4 7 13 16转载 2014-12-23 17:59:23 · 1305 阅读 · 0 评论 -
对一个正整数n,算得到1需要的最少操作次数。
实现一个函数,对一个正整数n,算得到1需要的最少操作次数。操作规则为:如果n为偶数,将其除以2;如果n为奇数,可以加1或减1;一直处理下去int func(unsigned int n){if(n == 1) return 0;if(n % 2 == 0) return 1 + func(n/2);int x = func(n + 1);int y = f转载 2014-08-05 22:08:32 · 2945 阅读 · 0 评论 -
有两等长数组A,B,所含元素相同,但顺序不同,只能取得A数组某值和B数组某值进行比较,比较结果为大于,小于,等于,但是不能取得同一数组A或者B中两个数进行比较,也不能取得某数组中的某个值
有两个数组a和b,两个数组的元素相同,但是顺序不同,写一个算法求出数组a和数组b中元素之间的对应关系。题意要求不能对同一个数组中的两个元素进行比较,也不能去取数组元素中的特定值进行比较。只能进行a和b元素之间的比较。《程序员面试宝典》P93一、O(n2)的解法#include using namespace std;void matching(int a[],int b[],i原创 2014-12-26 15:46:13 · 3467 阅读 · 0 评论 -
求矩形子数组最大和
编程珠玑第八章第11题,找出m*n的数组中总和最大的子数组,可以在长度为m的维度上使用平方算法,在长度为n的维度上使用扫描算法,时间复杂度时O(m2n)int maxSubMatrix(int *a, int m, int n){ int i,j,k; int maxSoFar=NM,maxEndingHere; int *sum = (int*)malloc(siz转载 2015-02-01 10:00:02 · 913 阅读 · 0 评论 -
Manacher算法--O(n)最长回文子串算法
O(n)最长回文子串算法注:转载的这篇文章,我发现下面那个源代码有点bug。。。在下一篇博客中改正了。。 转自:http://blog.youkuaiyun.com/ggggiqnypgjg/article/details/6645824 这里,我介绍一下O(n)回文串处理的一种方法。Manacher算法.原文地址:http://zhuhongcheng.wordpress.转载 2015-04-06 16:05:51 · 458 阅读 · 0 评论