https://leetcode.com/problems/product-of-array-except-self/第一次循环,建立left数组和right数组,通过动态规划来压缩时间复杂度。第二次循环,直接通过left和right数组相乘得到结果,并直接返回到res数组 1 class Solu...
分类:
其他好文 时间:
2015-07-18 12:29:07
阅读次数:
163
给你一个数组A[1..n],请你在O(n)的时间里构造一个新的数组B[1..n],使得B[i]=A[1]*A[2]*...*A[n]/A[i]。你不能使用除法运算。
思路1:题目中说明,不能用除法,那一定是在相乘的时候,省略那一项,然后时间复杂度要0(n),就不能两层循环,而是要利用前面的相乘信息来降低复杂度。
算法:相似的分拆技术在数组题中。线性时间构造两个新数组,从开始遍历相乘 T1[0] =1,T1[i]=T[i-1]*A[i-1] ;而 T2从后往前遍历相乘 T2[len-1] =1,T2[i]...
分类:
编程语言 时间:
2015-02-26 23:06:04
阅读次数:
408
这题看起来和max subarray差不多,只是加法变乘法,尝试过用分治法,发现划分情况的时候特别麻烦。于是分析下这题本身的特点:1、对0较敏感,一旦有0,乘积就不变了,所以需要在遇到0 的时候将数组拆分2、如果没有0, 一旦相乘,绝对值肯定会变大,所以仅考虑正负号的问题就够了。若整个数组相乘是一个...
分类:
其他好文 时间:
2014-09-30 17:23:59
阅读次数:
206
//变长数组 相乘取结果
#include
int main(void){
//
int array_01[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};
int array_02[4][3] = {12,11,10,9,8,7,6,5,4,3,2,1};
int result[3][3] = {0};
int i, j, k;
for (i =...
分类:
其他好文 时间:
2014-07-10 17:16:36
阅读次数:
229