欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python實現(xiàn)查找最小的k個數示例【兩種解法】

 更新時間:2019年01月08日 08:36:23   作者:hustfc  
這篇文章主要介紹了Python實現(xiàn)查找最小的k個數,結合實例形式對比分析了Python常見的兩種列表排序、查找相關操作技巧,需要的朋友可以參考下

本文實例講述了Python實現(xiàn)查找最小的k個數。分享給大家供大家參考,具體如下:

題目描述

輸入n個整數,找出其中最小的K個數。例如輸入4,5,1,6,2,7,3,8這8個數字,則最小的4個數字是1,2,3,4,。

解法1

使用partition函數可以知道,使用==O(N)==的時間復雜度就可以找出第K大的數字,并且左邊的數字比這個數小,右邊的數字比這個數字大。因此可以取k為4,然后輸出前k個數字,如果需要排序的話再對結果進行排序

# -*- coding:utf-8 -*-
class Solution:
  def PartitionOfK(self, numbers, start, end, k):
    if k < 0 or numbers == [] or start < 0 or end >= len(numbers) or k > end:
      return
    low, high = start, end
    key = numbers[low]
    while low < high:
      while low < high and numbers[high] >= key:
        high -= 1
      numbers[low] = numbers[high]
      while low < high and numbers[low] <= key:
        low += 1
      numbers[high] = numbers[low]
    numbers[low] = key
    if low < k:
      self.PartitionOfK(numbers, start + 1, end, k)
    elif low > k:
      self.PartitionOfK(numbers, start, end - 1, k)
  def GetLeastNumbers_Solution(self, tinput, k):
    # write code here
    if k <= 0 or tinput == [] or k > len(tinput):
      return []
    self.PartitionOfK(tinput, 0, len(tinput) - 1, k)
    return sorted(tinput[0:k])
#測試:
sol = Solution()
listNum = [4,5,1,6,2,7,3,8]
rel = sol.GetLeastNumbers_Solution(listNum, 4)
print(rel)

運行時間:30ms

占用內存:5732k

解法2

解法1存在兩個問題,一個是partition把數組的順序改變了,第二是無法處理海量的數據,海量的數組全部導入到內存里面做partition顯然是不合適的。因此可以找出結果中最大的數字,如果遍歷的數字比這個數字小,則替換,否則不變,可以采用堆的形式來實現(xiàn)數據結構,達到O(logK)的復雜度,因此整體的時間復雜度為N*O(logK)

# -*- coding:utf-8 -*-
class Solution:
  def GetLeastNumbers_Solution(self, tinput, k):
    # write code here
    if tinput == [] or k <= 0 or k > len(tinput):
      return []
    result = []
    for num in tinput:
      if len(result) < k:
        result.append(num)
      else:
        if num < max(result):
          result[result.index(max(result))] = num
    return sorted(result)
#測試:
sol = Solution()
listNum = [4,5,1,6,2,7,3,8]
rel = sol.GetLeastNumbers_Solution(listNum, 4)
print(rel)

運行結果同上

運行時間:25ms

占用內存:5724k

時間和空間占用都比解法1更優(yōu)。

更多關于Python相關內容感興趣的讀者可查看本站專題:《Python數學運算技巧總結》、《Python數據結構與算法教程》、《Python函數使用技巧總結》、《Python字符串操作技巧匯總》及《Python入門與進階經典教程

希望本文所述對大家Python程序設計有所幫助。

相關文章

  • Python使用StringIO和BytesIO讀寫內存數據

    Python使用StringIO和BytesIO讀寫內存數據

    這篇文章介紹了Python使用StringIO和BytesIO讀寫內存數據的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-05-05
  • 解決Pycharm后臺indexing導致不能run的問題

    解決Pycharm后臺indexing導致不能run的問題

    今天小編就為大家分享一篇解決Pycharm后臺indexing導致不能run的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-06-06
  • python訓練數據時打亂訓練數據與標簽的兩種方法小結

    python訓練數據時打亂訓練數據與標簽的兩種方法小結

    今天小編就為大家分享一篇python訓練數據時打亂訓練數據與標簽的兩種方法小結,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-11-11
  • python3 pathlib庫Path類方法總結

    python3 pathlib庫Path類方法總結

    這篇文章主要介紹了python3 pathlib庫Path類方法總結,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-12-12
  • Python項目目錄找不到.git文件怎么刪除

    Python項目目錄找不到.git文件怎么刪除

    這篇文章主要介紹了Python項目目錄找不到.git文件怎么刪除的問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • Python字符串切片操作知識詳解

    Python字符串切片操作知識詳解

    這篇文章主要介紹了Python中字符串切片操作 的相關資料,需要的朋友可以參考下
    2016-03-03
  • python自動化測試中APScheduler?Flask的應用示例

    python自動化測試中APScheduler?Flask的應用示例

    這篇文章主要為大家介紹了python自動化測試中APScheduler?Flask的應用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-07-07
  • 使用 Python 快速實現(xiàn) HTTP 和 FTP 服務器的方法

    使用 Python 快速實現(xiàn) HTTP 和 FTP 服務器的方法

    這篇文章主要介紹了使用 Python 快速實現(xiàn) HTTP 和 FTP 服務器 的方法,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-07-07
  • numpy模塊中axis的理解與使用

    numpy模塊中axis的理解與使用

    而在numpy中有很多的函數都涉及到axis,numpy中的軸axis是很重要的,許多numpy的操作根據axis的取值不同,作出的操作也不相同,這篇文章主要給大家介紹了關于numpy模塊中axis的理解與使用的相關資料,需要的朋友可以參考下
    2022-03-03
  • Python heapq使用詳解及實例代碼

    Python heapq使用詳解及實例代碼

    這篇文章主要介紹了Python heapq使用詳解及實例代碼的相關資料,需要的朋友可以參考下
    2017-01-01

最新評論