网上的一道搜狗笔试题
2011-10-04 15:23
302 查看
一个长度为n的数组a[0],a[1],...,a[n-1]。现在更新数组的名个元素,即a[0]变为a[1]到a[n-1]的积
a[1]变为a[0]和a[2]到a[n-1]的积,...,a[n-1]为a[0]到a[n-2]的积。
程序要求:
要求具有线性复杂度。
不能使用除法运算符。
思路是思想跟这个一样,用两个数组b,c
b[i] = a[0] *... * a[i - 1]
c[i] = a[i + 1] *...*a
时间复杂度为O(2n)
最后a[i] = b[i]*c[i],我在这里没用c数组
少用c【i】数组的话,程序写起来就不是太好理解,其实是一个道理
a[1]变为a[0]和a[2]到a[n-1]的积,...,a[n-1]为a[0]到a[n-2]的积。
程序要求:
要求具有线性复杂度。
不能使用除法运算符。
思路是思想跟这个一样,用两个数组b,c
b[i] = a[0] *... * a[i - 1]
c[i] = a[i + 1] *...*a
时间复杂度为O(2n)
最后a[i] = b[i]*c[i],我在这里没用c数组
少用c【i】数组的话,程序写起来就不是太好理解,其实是一个道理
public class CountMutiply { public static void main(String[] args) { int[] a={1,2,3,4}; int n=a.length; int[] b=new int ; b[0]=a[0]; for(int i=1;i<n-1;i++){ b[i]=b[i-1]*a[i]; } b[n-1]=a[n-1]; for(int i=n-1;i>=0;i--){ int temp=a[i]; if(i==n-1) a[i]=b[i-1]; if(i>0&&i<n-1){ a[i]=b[i-1]*b[i+1]; b[i]=temp*b[i+1]; } if(i==0) a[0]=b[1]; } //输出最后的a元素 for(int i=0;i<n;i++){ System.out.print(a[i]+" "); } } }
相关文章推荐
- 一道网上找的微软笔试题
- 关于虚函数(多态)与继承的一道搜狗笔试题
- 搜狗的一道笔试题
- 今天笔试的一道题,在网上搜到的答案。
- 昨天去搜狗笔试,最后一道编程题
- 详解一道C++笔试题,考察重载、覆盖、多态
- 【Android】一道Android OpenGL笔试题
- Java中有关构造函数的一道笔试题解析
- 昨晚参加某大型网上商城的校招笔试题,大家来讨论讨论
- 一道关于java线程中断的题目,求大神指导,昨晚的阿里巴巴笔试题
- 华为的一道很简单的笔试题,当时答得很烂,现在拿出来重新搞了一下
- 一道2014年阿里巴巴校招笔试题
- 搜狗笔试经历
- 算法与数据结构——搜狗笔试题
- 一道笔试题[错排问题]
- C++笔试面试题 从网上整理的,带答案
- 搜狗面试笔试一面二面全经历
- 一道关于字符查找的笔试题
- 搜狗笔试经历
- 最新九月百度人搜,阿里巴巴,腾讯华为小米搜狗笔试面试三十题