只用一层for循环 ,算法复杂度O(n)
def find_second_largest(arr):
"""
:param arr: an array consists of numbers
:return: the second largest number
"""
if arr[0] > arr[1]:
max_l = arr[0] # the largest number
max_sl = arr[1] # the second largest number
else:
max_l = arr[1]
max_sl = arr[0]
ind = range(len(arr))
for i in ind[2:]:
if arr[i] > max_l:
max_sl = max_l
max_l = arr[i]
elif arr[i] > max_sl and arr[i] < max_l:
max_sl = arr[i]
else:
continue
return max_sl
def main():
test_arr = [23, 45, 67, 54, 32, 678, 923, 1023, 555, 12, 17, 899, 2021]
print('test array:',test_arr)
print(find_second_largest(test_arr))
if __name__ == '__main__':
main()
输出
test array: [23, 45, 67, 54, 32, 678, 923, 1023, 555, 12, 17, 899, 2021]
1023