码迷,mamicode.com
首页 > 其他好文 > 详细

一道搜狗笔试题引发的思考

时间:2014-10-23 12:28:09      阅读:170      评论:0      收藏:0      [点我收藏+]

标签:一道搜狗笔试题引发的思考   如何看算法题   


一: 给定一个数组a[N],我们希望构造数组b[N],其中b[i]=a[0]*a[1]*...*a[N-1]/a[i]。
在构造过程:
1、不允许使用除法;
2、要求O(1)空间复杂度和O(n)时间复杂度;
3、除遍历计数器与a[N] b[N]外,不可使用新的变量(包括栈临时变量、对空间和全局静态变量等);


void makeArray(int a[],int b[],int len)  
{  
    int i,j;  
    b[0] = 1;  
  
    for(i=1;i<len;i++)  
    {  
        b[i] = b[i-1]*a[i-1];   //累乘a[0]*a[1]...a[i-1]  
    }  
  
    b[0] = a[len-1];  
    for(j=len-2;j>0;j--)  
    {  
        b[j] *= b[0];  
        b[0] *= a[j];  
    }  
}

二:学习心得

1  对于这种带要求的(要求苛刻的)问题,就要求我们不能应用常规的方法来思考它;

2  这种题,一般有一些特点,里面的技巧性很强,当然也比较容易发现,从递推公式中可以看出一些端倪;

3  你用常规的方法书写时 再加上 从递推公式中可以看出一些端倪 应该不难看出它的解法

4  平时一定要多多练习,在自己快速地写完一个算法题后,想一想有没有更优的方法,哪怕只有一点点代码优化;

5 代码优化,也是在面试的时候面试官,在你写完代码后,最爱问的一个问题。

一道搜狗笔试题引发的思考

标签:一道搜狗笔试题引发的思考   如何看算法题   

原文地址:http://blog.csdn.net/u010700335/article/details/40394449

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!