锁定老帖子 主题:一道简单的面试题
该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2010-04-06
imjl 写道 for (int i = 0; i < 1000; i++)
for (int j = 0; j < 100; j++) for (int k = 0; k < 10; k++) log(i * j * k); i*j*k 当i=0 或者j=0, 或者k=0时,,都相当于log(0),,也就是log(0)重复计算了1000×100×10次,,,类似的重复计算太多 优化点应该是把log的重复计算降低 顶下 |
|
返回顶楼 | |
发表时间:2010-04-06
JE帐号 写道 int i, j, k, m; for (i = 0; i < 10; i++){ for (j = 0; j < 100; j++){ m=i*j; for (k = 0; k < 100; k++){ log(m * k); } } } 应该是正解。 |
|
返回顶楼 | |
发表时间:2010-04-06
lyw985 写道 1.i,j,k必须从1开始
2.i*j*k是有重复的 3.log(i*j*k)=logi+logj+logk 这才是这道题的关键吧,像这种初始化的东西,根本相差不大 这个是正解,负数和零是没有对数的,所有从0开始计数的都不是最优的 i=1,j=2,k=3时的值和i=3,j=1,k=2的值是一样的 可以采用空间换时间的做法来进行优化 利用缓存数组可以减少很多工作量 |
|
返回顶楼 | |
发表时间:2010-04-06
是否可以用递归压栈暂存值的办法也减少计算次数呢?
|
|
返回顶楼 | |
发表时间:2010-04-06
你写个带按摩试试不就好了。我使用的过程是PrintWriter.println(i*j*k);
3个方案10次平均下来: A:675 B:665 C:659 |
|
返回顶楼 | |
发表时间:2010-04-06
抛出异常的爱 写道 呸。。。。
干嘛呢? |
|
返回顶楼 | |
发表时间:2010-04-06
log(i*j*k) = logi+logj+logk
|
|
返回顶楼 | |
发表时间:2010-04-06
大家数学都很好啊.
看见log就想起对数.我只想起日志... ... |
|
返回顶楼 | |
发表时间:2010-04-06
你们难道都不知道log(0)等于几?有意义吗?
|
|
返回顶楼 | |
发表时间:2010-04-06
jakend 写道 抛出异常的爱 写道 呸。。。。
干嘛呢? 见太多人胡说八道。。。。。。 出题的人脑也不正常 count=0; int sub = 0; StringBuilder builder = new StringBuilder(); start = System.nanoTime(); for(int i = 0 ; i < 1000 ; i++){ for(int j = 0 ; j< 100 ; j++){ sub = i * j; count = 0; builder.append(count); builder.append(NEWLINE); count += sub; builder.append(count); builder.append(NEWLINE); count += sub; builder.append(count); builder.append(NEWLINE); count += sub; builder.append(count); builder.append(NEWLINE); count += sub; builder.append(count); builder.append(NEWLINE); count += sub; builder.append(count); builder.append(NEWLINE); count += sub; builder.append(count); builder.append(NEWLINE); count += sub; builder.append(count); builder.append(NEWLINE); count += sub; builder.append(count); builder.append(NEWLINE); count += sub; builder.append(count); builder.append(NEWLINE); } } System.out.println(System.nanoTime()-start); System.out.println("-------------"); Thread.sleep(10000); System.out.println(builder.toString()); |
|
返回顶楼 | |