Python:最小的 k 个数
来源:互联网 发布:wps for mac 编辑:程序博客网 时间:2024/05/29 05:01
牛客网上的剑指 offer的在线编程:
题目描述
输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。
# -*- coding:utf-8 -*-'''最小的k个数题目描述输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。'''class Solution:# 蒂姆排序: def GetLeastNumbers_Solution1(self, tinput, k): # write code here if tinput == [] or k > len(tinput): return [] tinput.sort() return tinput[: k]# 快速排序: def GetLeastNumbers_Solution2(self, tinput, k): def quick_sort(lst): if not lst: return [] pivot = lst[0] left = quick_sort([x for x in lst[1: ] if x < pivot]) right = quick_sort([x for x in lst[1: ] if x >= pivot]) return left + [pivot] + right if tinput == [] or k > len(tinput): return [] tinput = quick_sort(tinput) return tinput[: k]# 归并排序: def GetLeastNumbers_Solution3(self, tinput, k): def merge_sort(lst): if len(lst) <= 1: return lst mid = len(lst) // 2 left = merge_sort(lst[: mid]) right = merge_sort(lst[mid:]) return merge(left, right) def merge(left, right): l, r, res = 0, 0, [] while l < len(left) and r < len(right): if left[l] <= right[r]: res.append(left[l]) l += 1 else: res.append(right[r]) r += 1 res += left[l:] res += right[r:] return res if tinput == [] or k > len(tinput): return [] tinput = merge_sort(tinput) return tinput[: k]# 堆排序: def GetLeastNumbers_Solution4(self, tinput, k): def siftup(lst, temp, begin, end): if lst == []: return [] i, j = begin, begin * 2 + 1 while j < end: if j + 1 < end and lst[j + 1] > lst[j]: j += 1 elif temp > lst[j]: break else: lst[i] = lst[j] i, j = j, 2 * j + 1 lst[i] = temp def heap_sort(lst): if lst == []: return [] end = len(lst) for i in range((end // 2) - 1, -1, -1): siftup(lst, lst[i], i, end) for i in range(end - 1, 0, -1): temp = lst[i] lst[i] = lst[0] siftup(lst, temp, 0, i) return lst if tinput == [] or k > len(tinput): return [] tinput = heap_sort(tinput) return tinput[: k]# 冒泡排序: def GetLeastNumbers_Solution5(self, tinput, k): def bubble_sort(lst): if lst == []: return [] for i in range(len(lst)): for j in range(1, len(lst) - i): if lst[j-1] > lst[j]: lst[j-1], lst[j] = lst[j], lst[j-1] return lst if tinput == [] or k > len(tinput): return [] tinput = bubble_sort(tinput) return tinput[: k]# 直接选择排序: def GetLeastNumbers_Solution6(self, tinput, k): def select_sort(lst): if lst == []: return [] for i in range(len(lst)-1): smallest = i for j in range(i, len(lst)): if lst[j] < lst[smallest]: smallest = j lst[i], lst[smallest] = lst[smallest], lst[i] return lst if tinput == [] or k > len(tinput): return [] tinput = select_sort(tinput) return tinput[: k]# 插入排序: def GetLeastNumbers_Solution7(self, tinput, k): def Insert_sort(lst): if lst == []: return [] for i in range(1, len(lst)): temp = lst[i] j = i while j > 0 and temp < lst[j - 1]: lst[j] = lst[j - 1] j -= 1 lst[j] = temp return lst if tinput == [] or k > len(tinput): return [] tinput = Insert_sort(tinput) return tinput[: k]
阅读全文
0 0
- Python:最小的 k 个数
- 寻找最小的K个数 python实现
- 最小的K个数
- 最小的K个数
- 最小的K个数
- 最小的k个数
- 最小的k个数
- 最小的k个数
- 最小的k个数
- 最小的k个数
- 最小的k个数
- 最小的K个数
- 最小的k个数
- 最小的K个数
- 最小的K个数
- 最小的K个数
- 最小的K个数
- 最小的K个数
- 浅析MySQL中exists与in的使用
- 基于M6097 switch的STP协议调试方法
- Paxos算法是莱斯利·兰伯特(Leslie Lamport)1990年提出的一种基于消息传递的一致性算法。
- 【演讲实录+视频】走近40+世界级AI专家!第三届中国人工智能大会资料分享(直播进行中_不断更新)
- C语言|构造一个简易编译器检测括号是否正确
- Python:最小的 k 个数
- 我的spfa
- C
- 杭电acm 4824Disk Schedule
- maven-shade-plugin 入门指南
- dvp和mipi接口
- solr删除全部索引数据
- 排序 基数排序
- FFMPEG —— 视频播放器 :(一)环境配置