def secondeNum(lst):
"""
找到第二大的数字
时间复杂度:O(n)
空间复杂度:O(1)
"""
import sys
max_item = sec_item = -sys.maxsize
for item in lst:
if item > max_item:
sec_item = max_item#把前一轮最大值变量赋值给第二大值,因为进入这里时,说明当前轮item为最新最大值
max_item = item
#当item比最大值小时,如果item比第二大值大,则更新第二大值
elif sec_item < item and item < max_item:# item < max_item是为了排查item=max_item情况
sec_item = item
return sec_item
from random import shuffle
lst = list(range(1,300))#较大数据量
# lst = []
lst.append(299)
lst.append(298)
lst.append(298)
lst.append(300)
shuffle(lst)
print(lst)
print(secondeNum(lst))
[69, 106, 49, 181, 186, 105, 76, 234, 93, 292, 166, 51, 39, 298, 120, 259, 158, 16, 194, 29, 23, 254, 281, 237, 223, 129, 224, 298, 94, 298, 32, 225, 46, 33, 17, 245, 134, 294, 289, 219, 43, 170, 222, 40, 226, 121, 146, 253, 5, 282, 238, 283, 287, 116, 91, 190, 10, 50, 103, 272, 285, 141, 198, 159, 2, 290, 8, 268, 90, 98, 59, 210, 236, 73, 74, 128, 7, 209, 99, 260, 208, 124, 87, 81, 36, 22, 214, 12, 57, 284, 207, 31, 295, 62, 71, 125, 127, 204, 182, 183, 96, 92, 213, 100, 178, 54, 110, 205, 144, 38, 276, 212, 143, 169, 299, 199, 140, 269, 252, 1, 258, 227, 235, 80, 248, 35, 241, 239, 149, 107, 60, 189, 67, 27, 206, 232, 286, 196, 65, 229, 115, 77, 263, 26, 44, 24, 163, 244, 271, 152, 97, 230, 249, 58, 138, 246, 122, 275, 20, 88, 151, 243, 200, 216, 197, 202, 111, 157, 139, 95, 61, 79, 48, 153, 242, 55, 19, 177, 13, 117, 84, 279, 137, 52, 179, 64, 288, 109, 160, 228, 296, 72, 112, 168, 156, 75, 274, 176, 233, 102, 172, 266, 221, 291, 162, 104, 63, 203, 195, 231, 45, 300, 218, 123, 14, 261, 188, 150, 192, 114, 273, 240, 277, 4, 257, 217, 6, 66, 165, 251, 41, 37, 201, 167, 34, 293, 28, 211, 89, 30, 247, 145, 131, 264, 21, 297, 130, 265, 220, 42, 56, 215, 299, 108, 184, 101, 171, 82, 180, 9, 185, 47, 155, 187, 133, 83, 280, 25, 135, 175, 161, 267, 3, 262, 174, 68, 148, 250, 164, 270, 53, 113, 255, 11, 193, 15, 132, 78, 70, 136, 18, 86, 278, 191, 173, 119, 154, 147, 126, 256, 118, 85, 142]
299
O(n)时间复杂度内数组找到第二大的值
最新推荐文章于 2021-03-06 20:27:30 发布