最大连续子序列相乘

深入理解 JVM 原理
深入理解 JVM 原理
wangxiaoming

最近忙实习   也没什么时间 些代码,看到一个 求最大连续子序列相乘的觉得挺有意思的,所以记录下


题目大意: 有一连续子序列 , 要你求出期间子序列相乘出现的最大值



解法: 简单,主要是因为有正有负 所以每次都要去记录 最大和最小 ,因为最小的可能绝对值最大 ,再乘一个数就会变成最大


源代码:

#include<iostream>
#include<cstdio>
using namespace std;

#define min(a, b) (a <b ? a:b)
#define max(a, b) (a > b? a: b)
int main()
{
    int n, i;
    double ans , maxx, minn, d;
    double tmp1,tmp2;
    while(cin>>n)
    {
         cin>>d;
         ans =maxx=minn=d;
        for(i = 1 ; i < n;i++)
        {
            cin>>d;
            tmp1=maxx*d;
             tmp2=minn*d;
               //这里记录最大最小是因为有正有负
            maxx = max(max(tmp1, tmp2),d);
            minn= min(min(tmp1, tmp2), d);
            if(ans < maxx)
            {//记录其间出现的最大值
                 ans =maxx;
            }
        }
        int t =(int) ans;
        if(ans < 0)
        {
             cout<<-1<<endl;
        }
        else if(t== ans)
        {
            cout<<t<<endl;
        }
        else 
        {
             printf("%.2f", ans);
        }
    }
    return 0;
}
//测试用例 7
// -2.5 4 0 3 0.5 8 -1 
// 12


wangxiaoming CSDN认证博客专家 架构 Spring Boot Redis
博客是很好的总结和记录工具,如果有问题,来不及回复,关注微信公众号:程序员开发者社区,获取我的联系方式,向我提问,也可以给我发送邮件,联系 1275801617@qq.com
©️2020 CSDN 皮肤主题: Age of Ai 设计师: meimeiellie 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值