输入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实现)相关推荐

  1. 算法入门经典-第七章 例题7-2最大乘积

    最大乘积 输入n个元素组成的序列s,你需要找出一个乘积最大的连续子序列.如果这个最大的成绩不是正数,应输入-1(表示无解).输入0结束输入.1<=n<=18,-10<=Si<= ...

  2. n分解后的最大乘积java_【编程题】乘积最大的拆分

    题意:给出一个数n,将其拆分为若干个互不相等的数字的和,要求这些数字的乘积最大. 分析:我们可以发现任何一个数字,只要能拆分成两个大于1的数字之和,那么这两个数字的乘积一定大于等于原数.也就是说,对于 ...

  3. 《算法入门经典大赛——培训指南》第二章考试

    UVa特别考试 UVa站点专门为本书设立的分类题库配合,方便读者提交: http://uva.onlinejudge.org/index.php?option=com_onlinejudge& ...

  4. 算法入门经典-第七章 例题7-2 八皇后问题

    原本利用回溯思想解决的经典八皇后问题,其实也是可以用递归解决的~ 八皇后的递归解决思路: 从第一行开始,依次判断0~8列的哪一列可以放置Queen,这样就确定了该行的Queen的位置,然后行数递增,继 ...

  5. 算法入门经典模板总结

    算法优化设计整理 第二章--算法设计优化 线性扫描.单调性问题: 第k个数问题: 1.POJ2388--nth_element() 正数连续子段和: 1.UVA1121--前缀和 即时维护最大值: 1 ...

  6. 算法入门经典-第七章 例题7-2-2 可重集的排列

    补充:如果某步骤的解可以由多个步骤得到,而每个步骤都有若干种选择,这些候选方式可能依赖于之前的选择, 且可以用递归枚举法实现,则它的工作方式可以用解答树来描述 可重:如果问题变成输入数组p,并按字典序 ...

  7. 算法入门经典第六章 例题6-8 树

    题意: 给一棵点带权的二叉树的中序和后序遍历,找一个叶子使得它到根的路径上的权值的和最小,如果多解,那该叶子本身的权值应该最小 解题思路: 1.用getline()输入整行字符,然后用stringst ...

  8. 算法入门经典第六章 例题6-2 铁轨

    题目描述 某城市有一个火车站,铁轨铺设如图所示.有n节车厢从A方向驶入车站,按进站顺序编号为1~n.你的任务是让它们按照某种特定的顺序进入B方向的铁轨并驶出车站.为了重组车厢,你可以借助中转站C.这是 ...

  9. 算法入门经典 第三章

    scanf 遇到tab或空格或换行符停下来 1.例题2-1 7744问题 从数本身看 从个位数的数字看 #include <iostream> #include<math.h> ...

最新文章

  1. iOS开发经验总结,我的2019进阶之路!
  2. 谷歌应用引擎新增PHP支持
  3. OAuth2.0文档
  4. 《架构之美》阅读笔记一
  5. cursoradpter自动更新
  6. Xamarin效果第二十篇之GIS中加载三维白模
  7. 大数据可视化常见的三种错误
  8. android手机模拟鼠标控制pc,利用Android手机仿真PC鼠标的设计与实现
  9. plsql查看建表语句
  10. Linux--DHCP 服务(了解 DHCP 服务、其工作过程、如何动态配置主机地址、安装 DHCP 服务器及配置步骤)
  11. 最小二乘法曲线拟合+C代码
  12. 关于虚拟偶像的面部表情捕捉
  13. 基于学习的方法决定在哪些分支节点上运行heuristic算法
  14. 请问我这段多线程代码为什么会死机?
  15. [Linux]线程概念_线程控制(线程与进程的区别与联系 | 线程创建 | 线程等待 | 线程终止 | 线程分离 | LWP)
  16. 基于Java+Springmvc+vue+element实现高校心理健康系统详细设计和实现
  17. python 如何远程控制另一台机器-通过cmd执行文件
  18. 宏碁华硕平板先过山寨iPad这道坎
  19. 009/160 CrackMe Andrénalin #2
  20. 基于51单片机的教室智能照明控制设计

热门文章

  1. python中关于字典的基础运用
  2. 关于如何提高代码可测试性的一些看法
  3. 在CentOS/RHEL/Scientific Linux 6 7 上安装Telnet
  4. 【李宏毅2020 ML/DL】补充:Meta Learning - Metric-based Approach Train+Test as RNN
  5. 【vim新手心得】最常用快捷键、编辑器vim插件使用心得(VsVim、IdeaVim、Vimium)
  6. win2008支持mysql asp.net_Win7、win2008中让IIS7支持asp的方法
  7. 如何设置硬盘安装linux,linux用硬盘安装时所设置选项
  8. [视频]MAC中如何单独放大文本字体
  9. catch所有提示的异常类型,程序执行异常时却还是没有报错,异常没有被catch到吗[已解决]
  10. Ubuntu 硬盘”分区“图文教程(用于光盘,U盘安装Ubuntu)