zoukankan      html  css  js  c++  java
  • 算法试题

    题目

    题目:输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。

    解析

    思路1

    这一题应用堆排序算法复杂度只有O(nlog k),堆是完全二叉树的一种,最大堆就是最上面的数是最大的
    该方法基于二叉树或者堆来实现,首先把数组前k个数字构建一个最大堆,然后从第k+1个数字开始遍历数组,如果遍历到的
    元素小于堆顶的数字,那么久将换两个数字,重新构造堆,继续遍历,最后剩下的堆就是最小的k个数,时间复杂度O(nlog k)。

    思路2

    排序 + 切片

    答案

    标准答案

    # -*- coding:utf-8 -*-
    class Solution:
        def GetLeastNumbers_Solution(self, tinput, k):
            # write code here、
            import heapq
            if tinput == None or len(tinput) < k or len(tinput) <= 0 or k <= 0:
                return []
    
            # 建立最小堆,最上面那个数是最小的,返回一个列表,这个列表就是从最小值开始的k个数
            return heapq.nsmallest(k, tinput)
    
    
    # -*- coding:utf-8 -*-
    class Solution:
        def GetLeastNumbers_Solution(self, tinput, k):
            # write code here、
            import heapq
            if tinput == None or len(tinput) < k or len(tinput) <= 0 or k <= 0:
                return []
    
            return sorted(tinput)[:k]

    自我实现代码

    li = [1, 5, 6, 8, 92, 3, 23]
    
    
    class Findmixknums:
        def __init__(self, li, k):
            self.li = li
            self.k = k
    
        def findknum(self):
            return sorted(self.li)[:self.k]
    
    
    findknum = Findmixknums(li, 3)
    print(findknum.findknum())
  • 相关阅读:
    自动化骨架屏生成思路
    npm查看包版本
    icon最佳实践
    node多进程模块
    node环境清空控制台的代码
    commonjs规范
    package.json中的devDependencies和dependencies有啥区别?
    delphi ExecWB
    delphi execCommand
    delphi 带历史信息的菜单
  • 原文地址:https://www.cnblogs.com/shijieli/p/10802665.html
Copyright © 2011-2022 走看看