要求:
在数组中找出前k大的值(如k=3)
分析:
最大的三个数比数组中其他数都大,因此可以利用类似求最大值的方法求前三名,具体思路为:初始化前三名(r1:第一名,r2:第二名,r3:第三名)为最小整数,然后遍历数组:
(1)如果当前值tmp大于r1:r3=r2,r2=r1,r1=tmp;
(2)如果当前值tmp大于r2且不等于r1:r3=r2,r2=tmp;
(2)如果当前值tmp大于r3且不等于r2:r3=tmp;
代码实现:
# -*- coding:utf-8 -*-
def findTop3(arr):
if arr == None or len(arr) < 3:
print("参数不合法!")
return
r1 = r2 = r3 = -2**31
i = 0
while i < len(arr):
if arr[i] > r1:
r3 = r2
r2 = r1
r1 = arr[i]
elif arr[i] > r2 and arr[i] != r1:
r3 = r2
r2 = arr[i]
elif arr[i] > r3 and arr[i] != r2:
r3 = arr[i]
i += 1
print("前三名分别为:"+str(r1)+","+str(r2)+","+str(r3))
if __name__ == "__main__":
arr = [4,7,1,2,3,5,3,6,3,2]
findTop3(arr)