友盟面试题

本文介绍了友盟面试中的几道经典算法题,包括快速排序的时间复杂度分析,1000的阶乘末尾0的数量,Bloomfilter算法及其应用场景与优缺点,以及寻找一个村庄中满足特定条件的村长问题的解决方案。通过对这些题目深入浅出的解析,有助于提升面试者在算法和数据结构方面的理解。
摘要由CSDN通过智能技术生成

1、快速排序的时间复杂度

最坏:O(n^2) 即在关键字有序或者基本有序时,退化为冒泡排序,为O(n^2)

平均:O(nlogn)

2、1000的阶乘末尾有多少个0?

1000!= 1*2*3*4*5*6*7*8*9*10.....*1000

0是由10产生的,而10 = 2*5

每经过两个数就有一个2的倍数,2,4,6,8...,但是每经过五个数才有一个5的倍数,所以2的个数要大于5的个数,所以只要找出有多少个因数5就可以了。

(1)每5个数就有一个5的因数,1000/5 = 200

(2)每25个数就有一个5*5的因数,1000/(5*5) = 40

(3)每125个数就有一个5*5*5的因数,1000/(5*5*5) = 8

(4)1000以内,5*5*5*5 = 625,只有1个

所以共计:1000/5 + 1000/25 + 1000/125 + 1 = 200 +40 +8 +1 = 249个

//计算n阶乘后0的个数
int Zero(int n)
{
	int sum = 0;
	int j;
	for(int i=5; i<=n; i +=5)//for(int i=1; i<=n; i ++)也可以
	{
		if(!(i%5))
		{
			j = i;
			while(!(j%5))	//计算5的个数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值