Python3 算法实现:查找数组中无重复的最小的 K 个数
使用 Python3 编写一个程序,给定一个长度为 n 的可能有重复值的数组,找出其中不去重的最小的 k 个数。例如数组元素是 4,5,1,6,2,7,3,8 这 8 个数字,则最小的 k 个数字是 1,2,3,4(升序)。数据范围:0≤k,n≤10000,数组中每个数的大小 0≤val≤1000。\n\n输入:第一行为两个整数 n 和 k,第二行为数组,每个元素间用空格隔开。\n\n输出:一行,为数组前 k 小的数,升序,每个元素间用空格隔开。\n\n输入示例:\n\n10 5\n466 709 455 854 80 816 767 114 318 962\n\n输出示例:\n\n80 114 318 455 466\n\n\n可以使用堆来解决这个问题。首先将数组中的元素放入一个最大堆中,然后依次从堆中取出前 k 个元素,即为数组前 k 小的数。\n\n具体步骤如下:\n1. 将输入的数组转换为一个最大堆。可以使用 Python 内置的 heapq 模块来实现堆操作。\n2. 从堆中依次取出前 k 个元素,保存到一个结果列表中。\n3. 对结果列表进行升序排序。\n4. 输出结果列表中的元素,每个元素之间用空格隔开。\n\n以下是使用 Python3 编写的代码实现:\npython\nimport heapq\n\ndef find_k_smallest(arr, k):\n # 将数组转换为最大堆\n heap = [-x for x in arr]\n heapq.heapify(heap)\n \n # 从堆中取出前 k 个元素\n result = []\n for _ in range(k):\n result.append(-heapq.heappop(heap))\n \n # 对结果列表进行升序排序\n result.sort()\n \n return result\n\n# 输入\nn, k = map(int, input().split())\narr = list(map(int, input().split()))\n\n# 输出\nresult = find_k_smallest(arr, k)\nprint(' '.join(map(str, result)))\n\n\n输入示例:\n\n10 5\n466 709 455 854 80 816 767 114 318 962\n\n\n输出示例:\n\n80 114 318 455 466\n
原文地址: https://www.cveoy.top/t/topic/qc3R 著作权归作者所有。请勿转载和采集!