码迷,mamicode.com
首页 > 编程语言 > 详细

编程之美----子数组的最大乘积

时间:2014-11-27 21:49:36      阅读:182      评论:0      收藏:0      [点我收藏+]

标签:问题   时间   算法   编程   数组   不能   需要   遍历   元素   

问题:给定一个长度为N的整数数组,只允许用乘法,不能用除法,计算任意(N-1)个数的组合中乘积最大的一组,并写出算法的时间复杂度。

解法一:用一个数组保存从左边到右边前i个元素的乘积。用另一个数组保存从右边到左边N-i个元素的乘积。然后结果就为两个数组中元素对应的乘积,复杂度为o(N)。

解法二:设N个数的乘积为P,对P进行分析。

1,P为0,则数组中至少包含一个0,假设除去一个0后,其它N-1个数的乘积为Q,若Q为0,则数组中至少有两个0,则返回0.若Q为正数,返回Q。若Q为负数,返回0.

2,P为负数。扫描一遍数组,去掉绝对值最小的负数。

3,P为正数。若数组中存在正数值,那么去掉最小的正数值,否则去掉绝对值最大的负数值。

对于P的正负性判定,可不需要直接求乘积,而是扫描一遍数组,求出数组中正数、负数、和0的个数,从而判断P的正负性,遍历的同时求出绝对值最小的正数和负数,绝对值最大的正数和负数,复杂度为o(N).

编程之美----子数组的最大乘积

标签:问题   时间   算法   编程   数组   不能   需要   遍历   元素   

原文地址:http://www.cnblogs.com/wen-ge/p/4127150.html

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