拼多多算法工程师笔试题之求解一维无序数组中三个数字乘积最大值(正负零均存在)

本文主要是介绍拼多多算法工程师笔试题之求解一维无序数组中三个数字乘积最大值(正负零均存在),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目:

给定一个包含正负数和零的一维无序数组,找到三个数字使得乘积最大

思路:

这道题目是个坑啊,我上来都没看直接当做之前一篇博文中求解矩阵中最大子数组和的问题了,采用动态规划的思想来解决,结果呢,只通过了10%左右,感觉很不可思议,于是重新读题发现不对了,人家说的是三个数字的乘积我这里动态规划的是两个数字的乘积,改成了三个数字的乘积也不对,瞬间郁闷了,不知道问题出现在了哪里,就只好自己在草稿纸上瞎写了,突然发现了端倪,题目给的样例也是一个坑,负数在这里是一个很关键的东西,因为:负负得正啊,那么接下来思路就有了,很简单,先对无序数组排序,那么所有的非负数肯定是出现在了数组的右端(这里默认是升序),在最左端的数可能是0,也可能是正数,也可能是负数,这里分几种情况考虑如下:

1.最左端是0,那么数组中不存在负数,最大值计算为:num_list[-1]*num_list[-2]*num_list[-3]

2.最左端为正数:同上

3.最左端为负数,这里可能有人会说需要考虑负数的个数,其实仔细想想是不需要,这里直接把左端的最大值记为:num_list[0]*num_list[1]*num_list[-1],是不是看出来什么端倪了,对,就是这意思,如果有超过两个负数那么这个表达式计算出来的结果必定是正数而且可能是最大值,如果只有一个负数,那么出现的结果就是:这个表达式的值必然为负数,那么最大值的计算结果就同上面两种情况了

    有了上面的分析之后,就可以得到下面几行代码的实现了,当然核心真的只有四五行,我下面加入了一点打印信息方便看结果:


#!usr/bin/env python  
#encoding:utf-8  ''''' 
__Author__:沂水寒城 
功能:求解一维无序数组中三个数字乘积最大值(正负零均存在)
''' def LargetThreeNumMutiple(n, num_list):num_list = [ int(i) for i in num_list.split(' ') ]num_list.sort()return max(num_list[0] * num_list[1] * num_list[-1], num_list[-1] * num_list[-2] * num_list[-3])if __name__ == '__main__':n = raw_input()num_list = raw_input()print '三个数字乘积最大值为:', LargetThreeNumMutiple(n, num_list)



结果如下:


4
4 3 2 1
三个数字乘积最大值为: 247
0 9 -5 7 1 3 2
三个数字乘积最大值为: 1895
0 1 6 11 4
三个数字乘积最大值为: 26410
-3 -5 -7 -11 -9 0 3 5 67 1
三个数字乘积最大值为: 663315
-34 23 45 6 7 0 0 -12 -32 -45 90 44 55 90 -100
三个数字乘积最大值为: 445500

    好了,要回去睡觉了,好困,如有感兴趣的朋友,欢迎交流哈。

这篇关于拼多多算法工程师笔试题之求解一维无序数组中三个数字乘积最大值(正负零均存在)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/904803

相关文章

Java中的数组与集合基本用法详解

《Java中的数组与集合基本用法详解》本文介绍了Java数组和集合框架的基础知识,数组部分涵盖了一维、二维及多维数组的声明、初始化、访问与遍历方法,以及Arrays类的常用操作,对Java数组与集合相... 目录一、Java数组基础1.1 数组结构概述1.2 一维数组1.2.1 声明与初始化1.2.2 访问

MySQL查询JSON数组字段包含特定字符串的方法

《MySQL查询JSON数组字段包含特定字符串的方法》在MySQL数据库中,当某个字段存储的是JSON数组,需要查询数组中包含特定字符串的记录时传统的LIKE语句无法直接使用,下面小编就为大家介绍两种... 目录问题背景解决方案对比1. 精确匹配方案(推荐)2. 模糊匹配方案参数化查询示例使用场景建议性能优

关于集合与数组转换实现方法

《关于集合与数组转换实现方法》:本文主要介绍关于集合与数组转换实现方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、Arrays.asList()1.1、方法作用1.2、内部实现1.3、修改元素的影响1.4、注意事项2、list.toArray()2.1、方

Java中的雪花算法Snowflake解析与实践技巧

《Java中的雪花算法Snowflake解析与实践技巧》本文解析了雪花算法的原理、Java实现及生产实践,涵盖ID结构、位运算技巧、时钟回拨处理、WorkerId分配等关键点,并探讨了百度UidGen... 目录一、雪花算法核心原理1.1 算法起源1.2 ID结构详解1.3 核心特性二、Java实现解析2.

python判断文件是否存在常用的几种方式

《python判断文件是否存在常用的几种方式》在Python中我们在读写文件之前,首先要做的事情就是判断文件是否存在,否则很容易发生错误的情况,:本文主要介绍python判断文件是否存在常用的几种... 目录1. 使用 os.path.exists()2. 使用 os.path.isfile()3. 使用

MySQL JSON 查询中的对象与数组技巧及查询示例

《MySQLJSON查询中的对象与数组技巧及查询示例》MySQL中JSON对象和JSON数组查询的详细介绍及带有WHERE条件的查询示例,本文给大家介绍的非常详细,mysqljson查询示例相关知... 目录jsON 对象查询1. JSON_CONTAINS2. JSON_EXTRACT3. JSON_TA

JAVA数组中五种常见排序方法整理汇总

《JAVA数组中五种常见排序方法整理汇总》本文给大家分享五种常用的Java数组排序方法整理,每种方法结合示例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录前言:法一:Arrays.sort()法二:冒泡排序法三:选择排序法四:反转排序法五:直接插入排序前言:几种常用的Java数组排序

使用雪花算法产生id导致前端精度缺失问题解决方案

《使用雪花算法产生id导致前端精度缺失问题解决方案》雪花算法由Twitter提出,设计目的是生成唯一的、递增的ID,下面:本文主要介绍使用雪花算法产生id导致前端精度缺失问题的解决方案,文中通过代... 目录一、问题根源二、解决方案1. 全局配置Jackson序列化规则2. 实体类必须使用Long封装类3.

Springboot实现推荐系统的协同过滤算法

《Springboot实现推荐系统的协同过滤算法》协同过滤算法是一种在推荐系统中广泛使用的算法,用于预测用户对物品(如商品、电影、音乐等)的偏好,从而实现个性化推荐,下面给大家介绍Springboot... 目录前言基本原理 算法分类 计算方法应用场景 代码实现 前言协同过滤算法(Collaborativ

Python实现特殊字符判断并去掉非字母和数字的特殊字符

《Python实现特殊字符判断并去掉非字母和数字的特殊字符》在Python中,可以通过多种方法来判断字符串中是否包含非字母、数字的特殊字符,并将这些特殊字符去掉,本文为大家整理了一些常用的,希望对大家... 目录1. 使用正则表达式判断字符串中是否包含特殊字符去掉字符串中的特殊字符2. 使用 str.isa