博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
小米2013校园招聘笔试题-最大连续子序列乘积
阅读量:6928 次
发布时间:2019-06-27

本文共 927 字,大约阅读时间需要 3 分钟。

九度题目地址:

题目描述:

给定一个浮点数序列(可能有正数、0和负数),求出一个最大的连续子序列乘积。

 

输入:

输入可能包含多个测试样例。

每个测试样例的第一行仅包含正整数 n(n<=100000),表示浮点数序列的个数。
第二行输入n个浮点数用空格分隔。
输入数据保证所有数字乘积在双精度浮点数表示的范围内。

 

输出:

对应每个测试案例,输出序列中最大的连续子序列乘积,若乘积为浮点数请保留2位小数,如果最大乘积为负数,输出-1。

 

样例输入:
7-2.5 4 0 3 0.5 8 -15-3.2 5 -1.6 1 2.55-1.1 2.2 -1.1 3.3 -1.1
样例输出:
12648.78

进入了误区,想了好久怎么区分正负情况。最后发现还是不区分方便,不管正负一律计算两次。一个保存最大值,一个保存最小值。

 

负数越小,绝对值就越大。

(暴力解决的时间复杂度n^2,肯定会超时!)

 

#include
#include
#include
using namespace std;double d1, d2; //分别保存最大值和最小值int n;double ans, d, tmp1, tmp2;int main() { while (~scanf("%d", &n)) { scanf("%lf", &d1); ans = d2 = d1; for (int i = 1; i < n; i++) { scanf("%lf", &d); tmp1 = d1 * d; tmp2 = d2 * d; d1 = max(max(tmp1, tmp2), d); d2 = min(min(tmp1, tmp2), d); if (d1 > ans) ans = d1; } int t = (int) ans; if (ans < 0) { puts("-1"); } else { if (ans == t) printf("%d\n", t); else printf("%.2f\n", ans); } }}

 

 

转载地址:http://izkjl.baihongyu.com/

你可能感兴趣的文章
C# 线程同步
查看>>
深度学习及机器学习框架对比摘要
查看>>
【转】Oracle 自定义函数语法与实例
查看>>
013-提升状态
查看>>
Office 2016 安装你所必须要注意的事项
查看>>
MonolithFirst
查看>>
java.lang.IllegalArgumentException: Request header is too large 解决方案
查看>>
Word在转PDF的过程中如何创建标签快速方便阅读(图文详解)
查看>>
python字符串(string)方法整理
查看>>
amazeui时间组件测试
查看>>
《数据科学家访谈录》读书笔记
查看>>
jsp 获取服务器ip 以及端口号
查看>>
使用 Laravel-Excel 进行 CSV/EXCEL 文件读写
查看>>
[Vue-rx] Disable Buttons While Data is Loading with RxJS and Vue.js
查看>>
整合使用持久层框架mybatis 使用SqlSessionTemplate模板类与使用映射接口 对比
查看>>
Service Mesh服务网格:是什么和为什么
查看>>
ASP.NET Aries 高级开发教程:Excel导入之代码编写(番外篇)
查看>>
Node.js 使用JWT进行用户认证
查看>>
phpstorm快捷键小结
查看>>
关于用wkwebview加载沙盒documents下html文件 模拟器可以,真机不行的解决方案
查看>>