励马涧

导航

 

    很久没动过什么脑,做脑力训练了,今天正好看到 一道面试附加题的另类求解 ,原题是4月7日某公司在华南地区举办了一年一度的"开发者"聚会——记某公司笔试

 ,其是要求为:

  题目:已知一个数组a[N],构造一个数组b[N],构造规则:b[i]=a[0]*a[1]*a[2]...a[N]/a[i];
要求:
1、不可以使用除法;
2、时间复杂度为O(n),空间复杂度为S(0);

     3、除遍历使用的变量外,不可以使用其它变量;

  一看到这题,在纸上一画,

  b[0]=a[1]*a[2]..a[n]

  b[1]=a[0]*a[2]..a[n]

  b[2]=a[0]*a[1]..a[n]

  ...

  b[n]=a[0]*a[1]..a[n-1]

  很快就想到十几年前学习C时的杨辉三角了,也凑个热闹写一个,用MonoDevelop 写下一个快速原型

    class MainClass
    {
        public static void Main (string[] args)
        {
            const int low=0,len=5;
            const int high=len-1;
            //初始化原始数组 
            int[] a=new int[len];
            for(int i=low;i<=high;i++)
            {
                a[i]=i+1;
            }
            int[] b=new int[len];
            b[low]=1;//形成左边的三角
            for(int i=low+1;i<=high;i++)
            {
                b[i]=a[i-1]*b[i-1];                  
            }          
             //利用b[0]形成倒三角
            for(int i=high;i>low;i--)
            {
                b[i]=b[i]*b[low];
                b[low]=b[low]*a[i];
            }//输出结果
            for(int i=low;i<=high;i++)
            {
                Console.WriteLine(b[i]);
            }
            
        }       

 

 

 

 

    } 

 

 再抽取一下子函数就可以了

 

posted on 2012-04-08 10:16  励马  阅读(230)  评论(0编辑  收藏  举报