1.1. Python, 数组中任意两元素的最大乘积(快速算法)

2018-05-13  本文已影响342人  LeeMin_Z

目的:
找出一个数组中任意两个非负数的最大乘积,并且需时较短,符合测试需求。

  1. 朴素算法:
    算任意两个数的乘积并找出最大值。复杂度O(n^2),想都不要想了,肯定很慢。

  2. 快速算法,仅找出最大的两个元素。注意这里用的是元素的顺序index,表示第index个元素。

  3. 注意coursera上恶心的检查方式,input不是一行,而是两行。第一行是数组长度,第二行才是数组的元素。

  4. 伪代码 sudo code

MaxPairwiseProductFast(A[1...n]):

index1 <-- 1
    for i from 2 to n:
        if A[i] > A[index1]:
        index1  <--  i

index2  <-- 1
    for i from 2 to n:
        if A[i] != A[index1] and A[i] > A[index2]:
        index2  <-- i

return A[index1] * A[index2]
  1. Python实现
# Uses python3
len1 = input()
n = input()
a = [int(x) for x in n.strip().split()]
le = int(len1)

# check the largest number's index 

index1 = 0

for i1 in range(1,le):
    if a[i1] > a[index1] :
        index1 = i1

# check the second largest number's index 

if index1 == 0 : index2 = 1
else: index2 = 0

for i2 in range(1,le):
    if a[i2] > a[index2] and i2 != index1 :
        index2 = i2

result = a[index2] * a[index1]
print(result)

参考资料
Coursera
数据结构与算法
美国加州大学圣地亚哥分校
国立高等经济大学

2018.5.13

上一篇下一篇

猜你喜欢

热点阅读