计算组合中乘积最大的一组
来源:互联网 发布:linux操作mysql数据库 编辑:程序博客网 时间:2024/06/14 16:27
给定一个长度为n的整数数组,只允许用乘法,不能用除法,请计算任意n-1个数的组合中乘积最大的一组。
方法一:暴力解决
从第一个数开始,算出每一个n-1个数相乘的结果,并设置一个max更新每次乘积的值。这种方法的时间复杂度为O(n*n)。
/************************************************************************* > File Name: MaxS.cpp > Author: jimmy > Mail: 1011933119@qq.com > Created Time: 2016年10月21日 星期五 09时21分03秒 ************************************************************************/#include<iostream>using namespace std;int MaxSS(int a[],int n){ int i,j; int result,max=1; for(i=0;i<n;i++) { result = 1; for(j=0;j<n;j++) { if(i!=j) result = result *a[j]; } if(result > max) max = result; } return max;}int main(){int a[5]={3,2,5,4,3};cout<<MaxSS(a,5)<<endl;return 0;}
2.用空间换取时间
假设现在求出去a[i]的n-1乘积,需要求a[i]之前的乘积和a[i]之后的乘积,然后把左右相乘。
先计算每个a[i]之前的乘积和每个a[i]之后的乘积。这样用两个for循环,时间复杂度为o(n).
然后再遍历一遍数组,比较前后乘积的大小,找出最大值。
/************************************************************************* > File Name: MaxS.cpp > Author: jimmy > Mail: 1011933119@qq.com > Created Time: 2016年10月21日 星期五 09时21分03秒 ***********************************************************************/#include<iostream>#include<cstring>using namespace std;class MaxS{ public: MaxS(int n_,int a_[]) { n = n_; for(int i=0;i<n_;i++) { a[i]=a_[i]; } } int maxSS() { int l[n],r[n],i; int max = a[0]; l[0] = a[0]; r[n-1] = a[n-1]; for(i=1; i<n; i++) l[i] = l[i-1] * a[i]; for(i= n-2; i>=0 ; i--) r[i] = r[i+1] * a[i]; int left,right,temp; for(i=0;i<n;i++) { if(i == 0) left = 1; else left = l[i-1]; if(i == n-1 ) right = 1; else right = r[i+1]; temp = left * right; if( temp > max) { max = temp; } } return max; } void print() { int i; for( i=0;i < n; i++) cout<<a[i]<<" "; } private: int n; int a[];};int main(){int a[5]={5,2,1,4,3};MaxS mm(5,a);mm.print();cout<<mm.maxSS()<<endl;return 0;}
0 0
- 计算组合中乘积最大的一组
- 第二十八章续:任意(N-1)个数的组合中乘积最大的一组
- 从N个整数中找了(n-1)个元素乘积最大的那一组
- 找出一组整数中最大的那个
- 蓝桥杯--集合中元素的最大乘积
- 乘积最大的分解
- 乘积最大的拆分
- 最大乘积的实现
- C语言中,输出一组数的排列和组合
- 长度为n的整形数组,找出其中的任意n-1个数乘积最大的那一组
- 一个正整数n被分成若干个不同自然数的和,求组成n的一组自然数的最大乘积
- 长度为n的整数数组,找出其中任意(n-1)个乘积最大的那一组
- sql 取出一组中时间最大的一条数据
- 四.求一组数据中最大的K个数
- 打印一组数字中最大数及出现的次数
- acm题目--正整数n的加法组合的最大乘积的超快算法
- 求数组中乘积最大的子串
- n-1 个数中三个数乘积最大的最小公倍数
- How to pass the paramater of Node.js or io.js into native C/C++ function.
- 使用云服务器搭建tomcat+mysql,构建网站
- js获取url传递参数,js获取url?号后面的参数
- opengles中的Tessellation(曲面细分)
- 自用Eclipse代码格式化设置
- 计算组合中乘积最大的一组
- Hadoop, HBase, Hive, ZooKeeper默认端口说明
- 【Linux系统调用】文件编程
- 利用 Selenium WebDriver + Grid2 实现并行的浏览器端性能测试
- 本地多域名配置
- 腾讯老司机的RecyclerView局部刷新爬坑之路
- 输入输出流BufferedReader PrintWriter demo
- Springboot 之 使用JPA进行分页操作
- 谈谈CDMA的短信流程