目的:
找出一个数组中任意两个非负数的最大乘积,并且需时较短,符合测试需求。
-
朴素算法:
算任意两个数的乘积并找出最大值。复杂度O(n^2),想都不要想了,肯定很慢。 -
快速算法,仅找出最大的两个元素。注意这里用的是元素的顺序index,表示第index个元素。
-
注意coursera上恶心的检查方式,input不是一行,而是两行。第一行是数组长度,第二行才是数组的元素。
-
伪代码 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]
- 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
网友评论