这道题目是求 n-1 个数的最大乘积,即数组大小为 n,则会存在 n 个 n-1 的连续数字,那么,我们需要寻找的是最大的那一个乘积。

      其实看到题目,感觉很简单,循环走两遍数组就可以得到结果,但是,那样的话,复杂度是平方量级的,如果一个数组中元素很多,那么,时间效率上是不能接受的,所以,需要重新思考问题,寻找简洁的解法。

      这里,我们可以利用辅助数组的办法,把需要乘在一起的数字保存下来,单独的放到数组中,然后乘在一块就可以了,这样说起来其实不是那么容易理解,我还是贴出代码吧,里面会有注释,看完代码也就清晰了:

      函数声明:

/*2.13 子数组的最大乘积*/
ll DutMaxMultipleInArray(int*, int);

      源代码:

/*任意n - 1个数的组合中乘积最大的一组*/
bool _DutMaxMultipleInArray = false;
ll DutMaxMultipleInArray(int* A, int size)
{if (!A || size <= 0){_DutMaxMultipleInArray = true;return -1;}/*两个辅助数组,数组元素存储1 -- n - 1个数的乘积*/ll* s = new ll[size];ll* t = new ll[size];ll maxValue = 1 << 31;s[0] = 1;t[size - 1] = 1;for (int i = 1; i < size; ++i)s[i] = A[i - 1] * s[i - 1];for (int j = size - 2; j >= 0; --j)t[j] = A[j + 1] * t[j + 1];ll* p = new ll[size];for (int k = 0; k < size; ++k){/*循环走一遍数组元素就可以得到n - 1个数组元素乘积的所有组合*/p[k] = s[k] * t[k];/*每次比较最大值选择最大即可*/if (p[k] > maxValue)maxValue = p[k];}return maxValue;
}

编程之美2.13 子数组的最大乘积相关推荐

  1. 编程之美2.13子数组的最大乘积

    题目: 给定一个长度为N的数组,只许用乘法,不许用除法,计算任意(N-1)个数的组合中乘积最大的一个组,并写出算法的时间复杂度. 如果把所可能的乘积找出来,共有(N-1)个数,n个n-1的数的组合,时 ...

  2. 编程之美2.10:寻找数组中的最大值和最小值

    编程之美2.10: 对于一个有N个整数组成的数组,需要比较多少次才能把最大值和最小值找出来呢? 算法的思想是: 分而治之 测试数据:---------------------------------- ...

  3. 编程之美2.1 求二进制中1的个数

    最近一段的时间,一直在看编程之美之类的算法书籍,刚开始看编程之美,感觉到难度太大,有时候也不愿意去翻动这本书,不过,经过一段时间的修炼,我也彻底的喜欢上这本书了, 书中的算法涉及到很多方面,树,链表, ...

  4. 2017“编程之美”终章:AI之战勇者为王

    编者按:8月15日,第六届微软"编程之美"挑战赛在选手的火热比拼中圆满落下帷幕."编程之美"挑战赛是由微软主办,面向高校学生开展的大型编程比赛.自2012年起, ...

  5. Java 并发编程之美:并发编程高级篇之一-chat

    借用 Java 并发编程实践中的话:编写正确的程序并不容易,而编写正常的并发程序就更难了.相比于顺序执行的情况,多线程的线程安全问题是微妙而且出乎意料的,因为在没有进行适当同步的情况下多线程中各个操作 ...

  6. Java 并发编程之美:并发编程高级篇之一

    借用 Java 并发编程实践中的话:编写正确的程序并不容易,而编写正常的并发程序就更难了.相比于顺序执行的情况,多线程的线程安全问题是微妙而且出乎意料的,因为在没有进行适当同步的情况下多线程中各个操作 ...

  7. 编程之美2.14 求数组的子数组之和的最大值

          这是一个在面试中出现概率很高的一道题目,就拿我来说吧,面试了5家公司中,两家公司问了这道题目,可见,这道题目是非常经典的.       解题思想也不是很难,我熟悉的有:两种解题办法:   ...

  8. 编程之美2.15 二维数组最大子数组的和(数组下标从(1,1)开始)

          首先,我们看到这篇文章的题目,我们就会想到之前的那个题目 -- 连续子数组最大和问题.这个问题无疑就是把原问题扩展到二维的情况.       想起来这个问题也不是很难,我们可以求解一维矩阵 ...

  9. 【LeetCode】Maximum Product Subarray 求连续子数组使其乘积最大

    Add Date 2014-09-23 Maximum Product Subarray Find the contiguous subarray within an array (containin ...

最新文章

  1. 为什么 ElasticSearch 比 MySQL 更适合复杂条件搜索
  2. PE知识复习之PE的导出表
  3. MySQL 笔记5 -- 多表查询
  4. PHP的SPFA,由于是之前的c代码,风格你懂的........(夹带php队列实现)
  5. SIP可靠性(SIP Reliability)
  6. 什么样的人不适合当程序员呢?
  7. CentOS 7下安装GUI图形界面
  8. OCP 12c最新考试原题及答案(071-4)
  9. android 前后台,Android App前后台监控
  10. 全球及中国网络教育行业商业模式与运行前景分析报告2022版
  11. 解决方案:awesomium web-browser frameworkThis View has crashed!
  12. jvm:jvm GC日志解析:G1日志解析
  13. 【NLP CS224N笔记】Lecture 12 - Information from parts of words Subword Models
  14. Linux服务器 - 腾讯云服务器挂载云硬盘
  15. 专家称“988”心理健康热线是一次“变革”,但目前运营上面临困境
  16. **sony Wi-H700通话质量非常差的原因分析**
  17. Mac电脑自动开机设置教程
  18. 关于H.264 x264 h264 AVC1
  19. linux删除重复文件,linuxshell删除重复文件只保留一份
  20. STM32F4XX的DFU功能

热门文章

  1. 经典的printk 写法
  2. linux命令应用之一
  3. 我是如何阅读编程书的
  4. [日志]保证让你一天不困的方法
  5. SetProcessWorkingSetSize 降低程序运行内存
  6. QT之计算器代码重构(六)
  7. python读写csv时中文乱码问题解决办法
  8. MySQL数据表的创建、查看、插入
  9. G7终极2.3.7完美版,黑白分明,值得永久收藏使用
  10. 一步一步搞定InfoPath(02)--配置VSTA