题解 | #第k轻的牛牛#
第k轻的牛牛
https://www.nowcoder.com/practice/7676478b46794456b145e8e48b0e2763
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param weights int整型一维数组
# @param k int整型
# @return int整型
#
class Solution:
def findKthSmallest(self , weights: List[int], k: int) -> int:
# write code here
max_w, min_w = weights[0], weights[0]
min_ws = [min_w]
# 时间复杂度为O(n),则意味着只能遍历一次数组
# 用一个长度为k的数组来记录最小的k个体重,每找到一个按顺序插入
for w in weights[1:]:
if len(min_ws) < k:
# 结果数组数量不足k个,则直接找位置插入数据
# 大于当前最大的,则直接插入队尾
if w >= max_w:
min_ws.append(w)
# 小于当前最小的,则插入队首
elif w <= min_w:
min_ws.insert(0, w)
# 否则在队里找到第一个比当前值大的位置插入
else:
for j in range(len(min_ws)):
if min_ws[j] > w:
min_ws.insert(j,w)
break
else:
# 结果数量等于k个,则每个数都要与结果数组里的值比较
# 如果是居间的一个值,则把最大的值pop掉,然后在里边找到第一个比它大的位置插入
if w < max_w and w > min_w:
min_ws.pop()
for j in range(len(min_ws)):
if min_ws[j] > w:
min_ws.insert(j, w)
break
# 如果比最小值更小,则把队尾的值pop掉,把当前值插入队首
elif w < min_w:
min_ws.pop()
min_ws.insert(0, w)
# 最大值与最小值始终在结果数组的队尾和队首
max_w = min_ws[-1]
min_w = min_ws[0]
return min_ws[-1]