给定一个长度为N的整数数组,只允许用乘法,不能用除法,计算任意(N-1)个数组合中乘积最大的一组,并写出算法的时间复杂度。解题思路:本题比较能简单。典型的用空间换时间的方法。用A[x]表示a[1]*a[2]*...*a[x],B[x]表示a[x]*a[x+1]*...*a[n]。一次遍历即可。O(n)扩展:若本题可用除法?解题思路:更简单了。A表示所有数的乘积,枚举不选的那个数就行。O(n) Read More
posted @ 2013-08-10 21:47 icfnight Views(132) Comments(0) Diggs(0) Edit
题目:能否快速找出一个数组中的两个数字,让两个数字之和等于一个给定的值,为了简单起见,我们可以假设这个数组中肯定存在至少一组符合要求的解。解法1:巧妙转化,然后二分查找。一般情况下,枚举2个未知数的时间复杂度为O(n^2),我们应该尽可能避免这种情况。枚举一个未知值,然后利用已知的特定条件限制另一个未知值。本题中要求A+B=Y,我们可以枚举A的值,然后在数组中二分查找(Y-A)的值,若成功找到,则为解。时间复杂度为O(nlogn)解法2:先排序,然后设置头尾指针l、r,根据a[l]+a[r]与目标值的大小比较结果,移动指针。 while(r>l) { if(a[l]+... Read More
posted @ 2013-08-10 21:21 icfnight Views(175) Comments(0) Diggs(0) Edit