人称算法中最low b的-冒泡排序

2020-01-04  本文已影响0人  青哥DevOps
  1. 有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]
上一篇 下一篇

猜你喜欢

热点阅读