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

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

题目:

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

思路:

这道题目是个坑啊,我上来都没看直接当做之前一篇博文中求解矩阵中最大子数组和的问题了,采用动态规划的思想来解决,结果呢,只通过了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中将字符数组转换为字符串的几种常用方法,包括使用String构造函数、String.valueOf()方法、StringBuilder以及A... 目录1. 使用String构造函数1.1 基本转换方法1.2 注意事项2. 使用String.valu

numpy求解线性代数相关问题

《numpy求解线性代数相关问题》本文主要介绍了numpy求解线性代数相关问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 在numpy中有numpy.array类型和numpy.mat类型,前者是数组类型,后者是矩阵类型。数组

Python中的随机森林算法与实战

《Python中的随机森林算法与实战》本文详细介绍了随机森林算法,包括其原理、实现步骤、分类和回归案例,并讨论了其优点和缺点,通过面向对象编程实现了一个简单的随机森林模型,并应用于鸢尾花分类和波士顿房... 目录1、随机森林算法概述2、随机森林的原理3、实现步骤4、分类案例:使用随机森林预测鸢尾花品种4.1

JAVA中整型数组、字符串数组、整型数和字符串 的创建与转换的方法

《JAVA中整型数组、字符串数组、整型数和字符串的创建与转换的方法》本文介绍了Java中字符串、字符数组和整型数组的创建方法,以及它们之间的转换方法,还详细讲解了字符串中的一些常用方法,如index... 目录一、字符串、字符数组和整型数组的创建1、字符串的创建方法1.1 通过引用字符数组来创建字符串1.2

python 字典d[k]中key不存在的解决方案

《python字典d[k]中key不存在的解决方案》本文主要介绍了在Python中处理字典键不存在时获取默认值的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录defaultdict:处理找不到的键的一个选择特殊方法__missing__有时候为了方便起见,

无线路由器哪个品牌好用信号强? 口碑最好的三个路由器大比拼

《无线路由器哪个品牌好用信号强?口碑最好的三个路由器大比拼》不同品牌在信号覆盖、稳定性和易用性等方面各有特色,如何在众多选择中找到最适合自己的那款无线路由器呢?今天推荐三款路由器让你的网速起飞... 今天我们来聊聊那些让网速飞起来的路由器。在这个信息爆炸的时代,一个好路由器简直就是家庭网编程络的心脏。无论你

如何测试计算机的内存是否存在问题? 判断电脑内存故障的多种方法

《如何测试计算机的内存是否存在问题?判断电脑内存故障的多种方法》内存是电脑中非常重要的组件之一,如果内存出现故障,可能会导致电脑出现各种问题,如蓝屏、死机、程序崩溃等,如何判断内存是否出现故障呢?下... 如果你的电脑是崩溃、冻结还是不稳定,那么它的内存可能有问题。要进行检查,你可以使用Windows 11

vue如何监听对象或者数组某个属性的变化详解

《vue如何监听对象或者数组某个属性的变化详解》这篇文章主要给大家介绍了关于vue如何监听对象或者数组某个属性的变化,在Vue.js中可以通过watch监听属性变化并动态修改其他属性的值,watch通... 目录前言用watch监听深度监听使用计算属性watch和计算属性的区别在vue 3中使用watchE

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

从去中心化到智能化:Web3如何与AI共同塑造数字生态

在数字时代的演进中,Web3和人工智能(AI)正成为塑造未来互联网的两大核心力量。Web3的去中心化理念与AI的智能化技术,正相互交织,共同推动数字生态的变革。本文将探讨Web3与AI的融合如何改变数字世界,并展望这一新兴组合如何重塑我们的在线体验。 Web3的去中心化愿景 Web3代表了互联网的第三代发展,它基于去中心化的区块链技术,旨在创建一个开放、透明且用户主导的数字生态。不同于传统