如何将列表中的两个大元素相加?

3 python algorithm list sub-array

我有一个这样的列表:

[1, 2, 5, 2, 7, 3, 9, 5...]
Run Code Online (Sandbox Code Playgroud)

有没有一种有效的方法可以在这里找到2个最大元素的总和:

for i in range():
    for j in range():
Run Code Online (Sandbox Code Playgroud)

我发现了这个:"最大的子阵列问题"

但我还没完全明白它的作用.

Dmi*_*kin 9

sum(sorted([9,8,1,3,4,5,7,0])[-2:])
Run Code Online (Sandbox Code Playgroud)
  1. 排序所有元素
  2. 得到最后两个元素
  3. 总结一下

  • 这是线性问题的解决方案; 不应该被接受.其他人已经给出了线性时间解决方案:读取数组一次,跟踪两个最大的elts,并在最后添加它们. (4认同)
  • @Dave这取决于...在纯粹的表现方面你是对的,这是次优的.但是,你知道,如果你没有数百万的数字,这个解决方案和线性的解决方案之间的差异将是微秒.然而,*big*的区别在于此代码更具可读性. (4认同)
  • 或者我们可以使用`sum(heapq.nlargest(2,your_list))` (2认同)

pau*_*ult 6

这是一个线性时间解决方案:

#initialize these to huge negative numbers
largest = -1e10
second_largest = -1e11
l = [9,8,1,3,4,5,7,0]
for item in l:
    if item > largest:
        second_largest = largest
        largest = item
    elif item > second_largest:
        second_largest = item

print(largest+second_largest)
# 17
Run Code Online (Sandbox Code Playgroud)