题解 | #输入n个整数,输出其中最小的k个#

输入n个整数,输出其中最小的k个

https://www.nowcoder.com/practice/69ef2267aafd4d52b250a272fd27052c

n, k = input().split() 
a = input().split()
for i in range(int(n)-1, int(n)-1-int(k), -1):
    flag = 0
    for j in range(int(n)-1, int(n)-i-1, -1):
        if int(a[j]) < int(a[j-1]):
            a[j-1], a[j] = a[j], a[j-1] 
            flag = 1
    if flag == 0:
        break
for i in range(int(k)):
    print(a[i], end=' ')
# print(a)

# 其实这道题就是用冒泡排序,不过与平时的不同点在于之前用冒泡都是把大的数往左边“浮”起来,
# 这次则是需要把小的数往右边“浮”起来。所以,"for i ..."这行代码需要执行的次数就等于k的值,
# 因为整个列表每排一次,都会有个此时的最小值往左边“浮”。第一遍,列表里最小的值浮到最左边的a[0],
# 然后对a[1:](即a[1]到最末尾)再进行一次排序,第二小的值浮到了a[1]上...循环往复。
# 所以,题目需要输出几个小值,我们排几次就好了,k和flag这两个变量的存在能有效减少复杂度。

全部评论

相关推荐

10-15 16:27
门头沟学院 C++
LeoMoon:建议问一下是不是你给他付钱😅😅
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务