最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

題目描述

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

解法1

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

# -*- 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])
#測(cè)試:
sol = Solution()
listNum = [4,5,1,6,2,7,3,8]
rel = sol.GetLeastNumbers_Solution(listNum, 4)
print(rel)

運(yùn)行時(shí)間:30ms

占用內(nèi)存:5732k

解法2

解法1存在兩個(gè)問(wèn)題,一個(gè)是partition把數(shù)組的順序改變了,第二是無(wú)法處理海量的數(shù)據(jù),海量的數(shù)組全部導(dǎo)入到內(nèi)存里面做partition顯然是不合適的。因此可以找出結(jié)果中最大的數(shù)字,如果遍歷的數(shù)字比這個(gè)數(shù)字小,則替換,否則不變,可以采用堆的形式來(lái)實(shí)現(xiàn)數(shù)據(jù)結(jié)構(gòu),達(dá)到O(logK)的復(fù)雜度,因此整體的時(shí)間復(fù)雜度為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)
#測(cè)試:
sol = Solution()
listNum = [4,5,1,6,2,7,3,8]
rel = sol.GetLeastNumbers_Solution(listNum, 4)
print(rel)

運(yùn)行結(jié)果同上

運(yùn)行時(shí)間:25ms

占用內(nèi)存:5724k

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

更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Python數(shù)學(xué)運(yùn)算技巧總結(jié)》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》及《Python入門與進(jìn)階經(jīng)典教程

希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • python使用雙豎線分割的實(shí)現(xiàn)

    python使用雙豎線分割的實(shí)現(xiàn)

    本文主要介紹了python使用雙豎線分割的實(shí)現(xiàn),通過(guò)接收用戶輸入的字符串,使用split()方法進(jìn)行分割,并將結(jié)果輸出給用戶,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01
  • 基于Python制作簡(jiǎn)單的IP查詢工具

    基于Python制作簡(jiǎn)單的IP查詢工具

    這篇文章主要為大家詳細(xì)介紹了如何基于Python制作一個(gè)簡(jiǎn)單的IP查詢工具,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-03-03
  • Keras 實(shí)現(xiàn)加載預(yù)訓(xùn)練模型并凍結(jié)網(wǎng)絡(luò)的層

    Keras 實(shí)現(xiàn)加載預(yù)訓(xùn)練模型并凍結(jié)網(wǎng)絡(luò)的層

    這篇文章主要介紹了Keras 實(shí)現(xiàn)加載預(yù)訓(xùn)練模型并凍結(jié)網(wǎng)絡(luò)的層,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-06-06
  • python實(shí)現(xiàn)自動(dòng)生成SQL語(yǔ)句

    python實(shí)現(xiàn)自動(dòng)生成SQL語(yǔ)句

    在數(shù)據(jù)處理和管理中,SQL(Structured?Query?Language)是一種非常重要的語(yǔ)言,本文主要介紹了如何使用python實(shí)現(xiàn)自動(dòng)生成SQL語(yǔ)句,需要的可以參考下
    2024-04-04
  • Python中的getter和setter的方法使用詳解

    Python中的getter和setter的方法使用詳解

    基本上,在面向?qū)ο缶幊陶Z(yǔ)言中,使用setter和getter方法的主要目的是為了確保數(shù)據(jù)的封裝,這篇文章主要介紹了Python的getter和setter的方法使用詳解,需要的朋友可以參考下
    2022-12-12
  • Django 實(shí)現(xiàn)下載文件功能的示例

    Django 實(shí)現(xiàn)下載文件功能的示例

    這篇文章主要介紹了Django 實(shí)現(xiàn)下載文件功能的示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-03-03
  • 詳解將Django部署到Centos7全攻略

    詳解將Django部署到Centos7全攻略

    這篇文章主要介紹了詳解將Django部署到Centos7全攻略,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-09-09
  • 詳解python中index()、find()方法

    詳解python中index()、find()方法

    本文通過(guò)實(shí)例代碼給大家介紹了python中index()、find()方法,文中給大家提到了Python將DataFrame的某一列作為index的方法,需要的朋友可以參考下
    2019-08-08
  • 正則給header的冒號(hào)兩邊參數(shù)添加單引號(hào)(Python請(qǐng)求用)

    正則給header的冒號(hào)兩邊參數(shù)添加單引號(hào)(Python請(qǐng)求用)

    這篇文章主要介紹了正則給header的冒號(hào)兩邊參數(shù)添加單引號(hào)(Python請(qǐng)求用)的相關(guān)知識(shí),非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-08-08
  • python第三方模塊xmltodict庫(kù)優(yōu)雅處理xml格式為json

    python第三方模塊xmltodict庫(kù)優(yōu)雅處理xml格式為json

    這篇文章主要為大家介紹了python第三方模塊xmltodict庫(kù)優(yōu)雅處理xml格式為json實(shí)例探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01

最新評(píng)論

青海省| 大渡口区| 福安市| 金阳县| 宁河县| 牙克石市| 崇仁县| 郯城县| 雷波县| 乌兰县| 舟曲县| 和平县| 松滋市| 胶州市| 大安市| 兰坪| 石嘴山市| 静宁县| 年辖:市辖区| 三都| 易门县| 霍邱县| 都兰县| 东莞市| 南昌市| 乌拉特后旗| 平泉县| 河南省| 靖远县| 阳江市| 华亭县| 兰西县| 彝良县| 交口县| 祁阳县| 南宫市| 会同县| 读书| 蓬莱市| 潼关县| 偃师市|