简体   繁体   English

如何在列表中找到两个元素的最大乘积?

[英]How to find the maximum product of two elements in a list?

I was trying out a problem on hackerrank contest for fun, and there came this question. 我正试图在hackerrank比赛中找到一个有趣的问题,并且出现了这个问题。 I used itertools for this, here is the code: 我使用itertools,这是代码:

import itertools

l = []

for _ in range(int(input())):
    l.append(int(input()))


max = l[0] * l[len(l)-1]

for a,b in itertools.combinations(l,2):
    if max < (a*b):
        max = (a*b)
print(max)

Is their any other efficient way than this? 他们还有其他任何有效的方法吗? As I am getting time out error on some test cases which I cant access (as its a small contest). 因为我在一些我无法访问的测试用例中得到时间错误(因为它是一个小小的竞赛)。

Iterate over the list and find the following: 迭代列表并找到以下内容:

Largest Positive number(a) 最大正数(a)

Second Largest Positive number(b) 第二大正数(b)

Largest Negative number(c) 最大负数(c)

Second Largest Negative number(d) 第二大负数(d)

Now, you will be able to figure out the maximum value upon multiplication, either a*b or c*d 现在,您将能够计算乘法时的最大值, a*bc*d

Just sort the list and select the largest of the products of the last 2 items in the list and the first 2 items in the list: 只需对列表进行排序,然后选择列表中最后2项的最大产品和列表中的前2项:

from operator import mul

numbers = [10, 20, 1, -11, 100, -12]
l = sorted(numbers)    # or sort in place with numbers.sort() if you don't mind mutating the list
max_product = max(mul(*l[:2]), mul(*l[-2:]))

This is a O(n log n) solution due to the sort. 由于排序,这是一个O(n log n)解决方案。 Someone else suggested a heapq solution which I found to be faster for lists longer than a few thousand random integers. 其他人提出了一个heapq解决方案,我发现对于长度超过几千个随机整数的列表来说更快。

Here is an implementation following @User_Targaryen's logic. 这是@ User_Targaryen逻辑之后的实现。 heapq returns the 2 largest and 2 smallest numbers in the list, mul operator returns the products of these 2 pairs of numbers, and max returns the largest of these 2 products. heapq返回列表中最大的2个和2个最小的数字, mul operator返回这两对数字的乘积,而max返回这两个乘积中最大的一个。

>>> import heapq
>>> from operator import mul
>>> l = [2,40,600,3,-89,-899]
>>> max(mul(*heapq.nsmallest(2,l)),mul(*heapq.nlargest(2,l)))
80011
# -899*-89 = 80011

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何找到 Numpy 数组的 M 个元素的 N 个最大乘积子数组? - How to find N maximum product subarrays of M elements of a Numpy array? 如何在列表中的多个元组中查找元素的乘积 - How to find the product of elements in a multiple tuples in a list 用python查找列表的3个最大元素 - Find 3 maximum elements of list with python 对列表中的元素求和并在Python中找到最大值 - Sum elements in a list of lists and find maximum in Python 如何查找列表中的数字是否是其他两个数字的乘积? - How to find if a number in the list being the product of other two numbers? Python:我试图找到列表中两个元素之间的最大差异 - Python: I'm trying to find the maximum difference between two elements in a list 如何使用函数式编程来迭代和查找列表中五个连续数字的最大乘积? - How to use functional programming to iterate and find maximum product of five consecutive numbers in a list? 如何在 Python 的列表中的两个元素之间找到缺失的元素? - How to find missing elements between two elements in a list in Python? 如何在Python的列表中重复查找两个元素之间的所有元素? - How to find all elements between two elements repeatedly in a list in Python? 从列表中查找任何元素子集的乘积 - Find product of any subset of elements from a list
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM