免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 2820 | 回复: 14
打印 上一主题 下一主题

google的那道面试题最快的方法应该是 [复制链接]

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-04-04 11:53 |只看该作者 |倒序浏览
计算第一位出现1的个数,计算第二位出现1的个数...
加起来

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
2 [报告]
发表于 2006-04-04 11:54 |只看该作者
时间复杂度:对数级别

论坛徽章:
0
3 [报告]
发表于 2006-04-04 11:59 |只看该作者
方法我知道了,可是对数级别的复杂度是怎么得出的呢?
怎么也得遍历完所有的数据才能知道有多少个1吧?请指教下~~

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
4 [报告]
发表于 2006-04-04 12:03 |只看该作者
...
那就是你还没有弄懂我的算罚
比方12:

1     2
1的个数
(2+1) + (1+((2>0)?:1:0)
按位计算出来的
所以是对数级别
不用遍历0-12

论坛徽章:
0
5 [报告]
发表于 2006-04-04 12:55 |只看该作者

回复 4楼 cjaizss 的帖子

我也是你那么想的.但我觉求f(n)的值并不是关键,而应该是求最大n的时候的算法.

论坛徽章:
0
6 [报告]
发表于 2006-04-04 13:10 |只看该作者

这个是我求f(n)的函数,有错的地方请指点

fun(long long m)
{
        char a[100];
        int n,i;
        long long k=0,x=m;
        sprintf(a,"%lld",m);
        n=strlen(a);
        for(i=0;i<n;i++)
        {
                x-=(a[i]-4*pow10(n-i-1);
                if(i!=0&&i!=n-1)
                {
                if(a[i]==49) k+=x+1+(n-1-i)*pow10(n-2-i);
                else if(a[i]!=4 k+=(a[i]-4*(n-1-i)*pow10(n-2-i)+pow10(n-1-i);
                else k+=0;
                }
                if(i==n-1) k+=a[i]==48?0:1;
                if(i==0)
                {
                        if(a[0]!=49) k+=pow10(n-1)+(a[0]-4*(n-1)*pow10(n-2);
                        else k+=1+(n-1)*pow10(n-2)+x;
                }
                if(a[0]==4 k=0;
                else if(n==1) k=1;
        }
        if(k==m) printf("%lld\n",k);

}

论坛徽章:
0
7 [报告]
发表于 2006-04-04 13:16 |只看该作者
>>按位计算出来的
这个方法跟用语言的api接口做出来有什么分别?

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
8 [报告]
发表于 2006-04-04 13:27 |只看该作者
原帖由 converse 于 2006-4-4 13:16 发表
>>按位计算出来的
这个方法跟用语言的api接口做出来有什么分别?

算法和语言无关

论坛徽章:
0
9 [报告]
发表于 2006-04-04 13:30 |只看该作者
>>算法和语言无关
那请问有几个语言支持位操作呢?你这个对数级别复杂度的算法也许只有对支持位操作的语言成立吧?既然如此,就不能下结论说是对数级别的复杂度而应该加一个前提条件.

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
10 [报告]
发表于 2006-04-04 13:32 |只看该作者
原帖由 converse 于 2006-4-4 13:30 发表
>>算法和语言无关
那请问有几个语言支持位操作呢?你这个对数级别复杂度的算法也许只有对支持位操作的语言成立吧?既然如此,就不能下结论说是对数级别的复杂度而应该加一个前提条件.

我没有用位操作,不过如果一个语言连/和%两个运算都不支持,我也就不说什么了,如果这两个都不支持,那么这道题目根本就做不出来,更谈不上好的算法
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP