首页 > 试题广场 >

n个数里最小的k个

[编程题]n个数里最小的k个
  • 热度指数:28861 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
找出n个数里最小的k个

输入描述:
每个测试输入包含空格分割的n+1个整数,最后一个整数为k值,n
不超过100。


输出描述:
输出n个整数里最小的k个数。升序输出
示例1

输入

3 9 6 8 -10 7 -11 19 30 12 23 5

输出

-11 -10 3 6 7
a=[int(n) for n in input().split()]
b=a[:-2]
s=[str(x) for x in sorted(b)[:a[-1]]]
print(' '.join(s))
发表于 2019-01-08 19:38:26 回复(0)
import sys
num=list(map(int,sys.stdin.readline().strip().split()))
k=num.pop()
num.sort()
print(' '.join([str(num[i]) for i in range(k)]))

发表于 2018-05-28 11:08:43 回复(0)
其实也可以用二叉堆输出
from heapq import nsmallest
N = list(map(lambda x:int(x),input().split()))
print(" ".join(map(lambda x:str(x),nsmallest(N[-1],N[:-1]))))

发表于 2018-04-18 19:18:23 回复(0)
可读性强一点的Python解法,用到了内置的排序,时间复杂度O(nlogn)
nums = list(input().split())
k = int(nums[-1])
nums = [int(i) for i in nums[:-1]]
nums = sorted(nums)
print(' '.join(str(i) for i in nums[:k]))

发表于 2018-04-03 13:17:04 回复(0)
def adjust_heap(A,n,i):
    while True:
        left = (i<<1)+1
        right = (i<<1)+2
        min_index = i
        if left<n and A[left]<A[min_index]:
            min_index = left
        if right<n and A[right]<A[min_index]:
            min_index = right
        if min_index!=i:
            temp = A[min_index]
            A[min_index] = A[i]
            A[i]= temp
            i = min_index
        else:
            break
def get_k_min(A,k,n):
    for i in range(n/2-1,-1,-1):
        adjust_heap(A,n,i)
    a = []
    while k:
        n = n-1
        temp = A[0]
        A[0] = A[n]
        A[n]=temp
        a.append(A[n])
        adjust_heap(A,n,0)
        k=k-1
    return a

def main():
    input_str = raw_input()
    s = input_str.split(' ')
    s = [int(c) for c in s]
    k = s[-1]
    a = get_k_min(s[:-1],s[-1],len(s)-1)
    a = [str(c) for c in a]
    print ' '.join(a)
if __name__ == "__main__":
    main()

编辑于 2018-04-02 23:21:47 回复(1)
userinput = input().split(' ')
target=userinput[len(userinput)-1]
result=[]
counter=0
userinput.pop()
userinput = list(map(int,userinput))
userinput.sort()
while(counter<int(target)):
    result.append(userinput[counter])
    counter+=1
result = list(map(str,result))
print(' '.join(result))

发表于 2018-01-26 04:22:47 回复(0)
nums=input().split()
num=int(nums.pop(-1))
nums=sorted([int(i) for i in nums])
nums=[str(i) for i in nums]
print(' '.join(nums[:num]))
#反正就是一坨骚操作。。

发表于 2018-01-17 00:53:34 回复(0)

python 3行解法,通过测试:

a = list(map(int, input().split()))
lists, k = a[:-1], a[-1]
print(" ".join(list(map(str, sorted(lists)[:k]))))
发表于 2017-09-07 13:52:39 回复(2)
input_num=raw_input().split()
k=int(input_num[-1])
input_num=input_num[0:len(input_num)-1]
out_Num=sorted(input_num,lambda x ,y:cmp(int(x),int(y)))
for i in range(k):
    print out_Num[i],
发表于 2017-09-04 15:31:03 回复(0)