最大乘积java_《算法入门经典》-最大乘积(java实现)
输入n个元素组成的序列S,你需要找出一个乘积最大的连续子序列。如果这个最大的乘积不是正数,应该输出-1(表示无解).1<=n<=18,-10<=Si<=10
输入:
3
2 4 -3
5
2 5 -1 2 -1
输出:
8
20
package chp7;
import java.util.Arrays;
import java.util.Scanner;
import java.util.Stack;
/**
* 伪代码:
* 1、输入序列S
* 2、与0比较,如果为正则归入集合A,如果为负则归为集合B(这里因为不知道有多少正负数,A,B集合都用堆栈实现,这样不会存入无意义的0)
* 3、若A<=1,B=1,此时无解
* 4、判读B是否大于1
* a),如果B《=1,则此时A中集合全部相乘,则是最大值
* b),如果B》1
* i,奇数,将B排序后,如:-3,-2,-1,则最大值为[0..B.length-2]全部相乘(不加最后一个)
* ii,偶数,B全部相乘
*
* @author administrator
*
*/
public class MaxMulti {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (in.hasNext()) {
int n = in.nextInt();
int S[] = new int[n];
Stack A=new Stack<>();
Stack BS=new Stack<>();
//1,创建S,A(正),B(负)
for (int i = 0; i < n; i++) {
S[i] = in.nextInt();
if(S[i]>0){
A.push(S[i]);
}
if(S[i]<0){
BS.push(S[i]);
}
}
int B[]=new int[BS.size()];
for(int i=0;i
B[i]=BS.get(i);
}
Arrays.sort(B);
//2,
if(A.size()<=1 && B.length==1){
System.out.println(-1);
}
//3,判断B
long MAX=0l;
if(B.length<=1){
MAX=Mul(A,A.size());//A集合中元素的乘积和
}else{
if(B.length%2==0){//偶数
MAX=Mul(A,A.size())*Mul(B,B.length);
}else{//奇数
MAX=Mul(A,A.size())*Mul(B,B.length-1);
}
}
System.out.println(MAX);
}
}
private static long Mul(Stack a, int size) {
int sum=1;
while(!a.isEmpty()){
sum*=a.pop();
}
return sum;
}
public static int Mul(int[] b, int i) {
int sum=1;
for(int j=0;j
sum*=b[j];
}
return sum;
}
}
最大乘积java_《算法入门经典》-最大乘积(java实现)相关推荐
- 算法入门经典-第七章 例题7-2最大乘积
最大乘积 输入n个元素组成的序列s,你需要找出一个乘积最大的连续子序列.如果这个最大的成绩不是正数,应输入-1(表示无解).输入0结束输入.1<=n<=18,-10<=Si<= ...
- n分解后的最大乘积java_【编程题】乘积最大的拆分
题意:给出一个数n,将其拆分为若干个互不相等的数字的和,要求这些数字的乘积最大. 分析:我们可以发现任何一个数字,只要能拆分成两个大于1的数字之和,那么这两个数字的乘积一定大于等于原数.也就是说,对于 ...
- 《算法入门经典大赛——培训指南》第二章考试
UVa特别考试 UVa站点专门为本书设立的分类题库配合,方便读者提交: http://uva.onlinejudge.org/index.php?option=com_onlinejudge& ...
- 算法入门经典-第七章 例题7-2 八皇后问题
原本利用回溯思想解决的经典八皇后问题,其实也是可以用递归解决的~ 八皇后的递归解决思路: 从第一行开始,依次判断0~8列的哪一列可以放置Queen,这样就确定了该行的Queen的位置,然后行数递增,继 ...
- 算法入门经典模板总结
算法优化设计整理 第二章--算法设计优化 线性扫描.单调性问题: 第k个数问题: 1.POJ2388--nth_element() 正数连续子段和: 1.UVA1121--前缀和 即时维护最大值: 1 ...
- 算法入门经典-第七章 例题7-2-2 可重集的排列
补充:如果某步骤的解可以由多个步骤得到,而每个步骤都有若干种选择,这些候选方式可能依赖于之前的选择, 且可以用递归枚举法实现,则它的工作方式可以用解答树来描述 可重:如果问题变成输入数组p,并按字典序 ...
- 算法入门经典第六章 例题6-8 树
题意: 给一棵点带权的二叉树的中序和后序遍历,找一个叶子使得它到根的路径上的权值的和最小,如果多解,那该叶子本身的权值应该最小 解题思路: 1.用getline()输入整行字符,然后用stringst ...
- 算法入门经典第六章 例题6-2 铁轨
题目描述 某城市有一个火车站,铁轨铺设如图所示.有n节车厢从A方向驶入车站,按进站顺序编号为1~n.你的任务是让它们按照某种特定的顺序进入B方向的铁轨并驶出车站.为了重组车厢,你可以借助中转站C.这是 ...
- 算法入门经典 第三章
scanf 遇到tab或空格或换行符停下来 1.例题2-1 7744问题 从数本身看 从个位数的数字看 #include <iostream> #include<math.h> ...
最新文章
- iOS开发经验总结,我的2019进阶之路!
- 谷歌应用引擎新增PHP支持
- OAuth2.0文档
- 《架构之美》阅读笔记一
- cursoradpter自动更新
- Xamarin效果第二十篇之GIS中加载三维白模
- 大数据可视化常见的三种错误
- android手机模拟鼠标控制pc,利用Android手机仿真PC鼠标的设计与实现
- plsql查看建表语句
- Linux--DHCP 服务(了解 DHCP 服务、其工作过程、如何动态配置主机地址、安装 DHCP 服务器及配置步骤)
- 最小二乘法曲线拟合+C代码
- 关于虚拟偶像的面部表情捕捉
- 基于学习的方法决定在哪些分支节点上运行heuristic算法
- 请问我这段多线程代码为什么会死机?
- [Linux]线程概念_线程控制(线程与进程的区别与联系 | 线程创建 | 线程等待 | 线程终止 | 线程分离 | LWP)
- 基于Java+Springmvc+vue+element实现高校心理健康系统详细设计和实现
- python 如何远程控制另一台机器-通过cmd执行文件
- 宏碁华硕平板先过山寨iPad这道坎
- 009/160 CrackMe Andrénalin #2
- 基于51单片机的教室智能照明控制设计
热门文章
- python中关于字典的基础运用
- 关于如何提高代码可测试性的一些看法
- 在CentOS/RHEL/Scientific Linux 6 7 上安装Telnet
- 【李宏毅2020 ML/DL】补充:Meta Learning - Metric-based Approach Train+Test as RNN
- 【vim新手心得】最常用快捷键、编辑器vim插件使用心得(VsVim、IdeaVim、Vimium)
- win2008支持mysql asp.net_Win7、win2008中让IIS7支持asp的方法
- 如何设置硬盘安装linux,linux用硬盘安装时所设置选项
- [视频]MAC中如何单独放大文本字体
- catch所有提示的异常类型,程序执行异常时却还是没有报错,异常没有被catch到吗[已解决]
- Ubuntu 硬盘”分区“图文教程(用于光盘,U盘安装Ubuntu)