论坛首页 入门技术论坛

一道简单的面试题

浏览 29500 次
该帖已经被评为新手帖
作者 正文
   发表时间: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的重复计算降低



顶下
0 请登录后投票
   发表时间: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);
	   }
   }
}

应该是正解。
0 请登录后投票
   发表时间: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的值是一样的

可以采用空间换时间的做法来进行优化

利用缓存数组可以减少很多工作量
0 请登录后投票
   发表时间:2010-04-06  
是否可以用递归压栈暂存值的办法也减少计算次数呢?
0 请登录后投票
   发表时间:2010-04-06  
你写个带按摩试试不就好了。我使用的过程是PrintWriter.println(i*j*k);
3个方案10次平均下来:
A:675
B:665
C:659


0 请登录后投票
   发表时间:2010-04-06  
抛出异常的爱 写道
呸。。。。


干嘛呢?
0 请登录后投票
   发表时间:2010-04-06  
log(i*j*k) = logi+logj+logk
0 请登录后投票
   发表时间:2010-04-06  
大家数学都很好啊.
看见log就想起对数.我只想起日志... ...
0 请登录后投票
   发表时间:2010-04-06  
你们难道都不知道log(0)等于几?有意义吗?
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());


0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics