人称算法中最low b的-冒泡排序
2020-01-04 本文已影响0人
青哥DevOps
- 有20个members,找到其中最大和第二大的数字,只能用一次for循环,时间复杂度为O(n)。
答:
# -*- coding:utf-8 -*-
t = [5,2,18,9,10,21,11,35,56,72,67,82,97,94,39,27,61,22,33,101]
# 假设x>y
x = t[0]
y = t[1]
for i in t[2:]:
if x > y:
if i > x:
y = x
x = i
elif i < x:
if i > y:
y = i
# i < y
else:
pass
# i = x
else:
pass
if x < y:
if i > y:
x = y
y = i
elif i < y:
if i > x:
x = i
else:
pass
else:
pass
print("x: %s, y: %s" %(x, y))
x: 1001, y: 909
如果是时间复杂度为O(n^2)的话,这个比较简单了,上代码
# -*- coding:utf-8 -*-
# 列表t,找出列表中最大和第二大的数字,时间复杂度为O(n^2)
t = [5, 2, 18, 9, 10, 21, 11, 35, 909, 56, 72, 67, 82, 1001, 97, 94, 39, 27, 61, 22, 33, 101]
# 假设x>y
def mp(my_list):
for x in range(len(my_list)-1, -1, -1):
for y in range(0, x):
curren = my_list[y]
if my_list[y] < my_list[y + 1]:
my_list[y] = my_list[y + 1]
my_list[y + 1] = curren
return my_list
print(mp(t)[0:2])
[1001, 909]