資料結構與演算法——有1億個整數,找出最大的1000個,要求時間越短越好,空間佔用越少越好
有1億個整數,找出最大的1000個,要求時間越短越好,空間佔用越少越好(迅雷筆試)
首先要明白1億個整數佔用多大的記憶體,按每個整數4個位元組來算,用400000000B,大約400000KB,大約400MB,可見不能直接將那麼多的資料直接拷貝到記憶體進行排序演算法。
思路:
1、讀入前1000個整數,建立最小堆。O(1)
2、然後接著讀入剩下的整數,將每個讀入的整數與該最小堆中的最小值進行比較(與堆頂進行比較),如果比最小值還要小,則繼續讀入剩下的資料。O(N)
3、如果讀入的資料比最小值大,則刪除最小值,並將該資料插入到最小堆的合適位置。O(log1000)
4、重複步驟2,直到將剩下的資料全部讀完。
5、按中序遍歷輸出該最小堆中的資料,也就是按從小到大輸出最大的1000個資料。
該演算法的時間複雜度為O(N),空間複雜度為1000,其實是常數。
參考:
http://blog.csdn.net/linux_ever/article/details/50488816
http://blog.csdn.net/linux_ever/article/details/50493457
http://blog.163.com/xychenbaihu@yeah/blog/static/1322296552012821103039741
http://www.codeweblog.com/the-art-of-programming-by-july-%E6%B5%B7%E9%87%8F%E6%95%B0%E6%8D%AE%E4%B9%A0%E9%A2%98%E8%A7%A3%E7%AD%94/
http://www.kancloud.cn/kancloud/the-art-of-programming/41612
相關文章
- linux下找出佔用空間最大的目錄Linux
- 程式碼是債務,越少越好
- JavaScript 資料結構與演算法之美 - 時間和空間複雜度JavaScript資料結構演算法複雜度
- MYSQL造資料佔用臨時表空間MySql
- 資料結構與演算法——時間複雜度資料結構演算法時間複雜度
- centos Linux 統計某個資料夾佔用空間大小CentOSLinux
- 資料結構與演算法——兩個大整數的乘積問題資料結構演算法
- 計算一個表佔用的空間的大小
- 資料結構與演算法之間有何關係?資料結構演算法
- 資料結構與演算法:演算法的時間複雜度資料結構演算法時間複雜度
- 【資料結構】-時間複雜度和空間複雜度資料結構時間複雜度
- 空間劃分的資料結構資料結構
- 檢視一個User所有物件佔用的空間大小物件
- 使用一個T-SQL語句批量查詢資料表佔用空間及其行數SQL
- 檢視資料庫佔用磁碟空間的方法資料庫
- PostgreSQL Page頁結構解析(4)- 執行DML時表佔用空間解析SQL
- 資料結構與演算法之美-王爭-極客時間資料結構演算法
- 【HotSpot】一個java物件佔多少空間HotSpotJava物件
- 演算法與資料結構--空間複雜度O(1)遍歷樹演算法資料結構複雜度
- linux 列出一個目錄佔用的空間 du (轉)Linux
- 資料結構 之 演算法時間複雜度資料結構演算法時間複雜度
- 解密Prompt系列16. LLM對齊經驗之資料越少越好?LTD & LIMA & AlpaGasus解密
- 檢視ELF中資料段哪些變數佔用空間變數
- oracle中用sql計算一個表佔用的空間的大小OracleSQL
- 【演算法學習筆記】Meissel-Lehmer 演算法 (亞線性時間找出素數個數)演算法筆記
- 一個表空間有多個資料檔案,新增資料時的寫入順序和分配演算法初探實驗(上)演算法
- 陣列(Array)- 極客時間(資料結構與演算法之美)陣列資料結構演算法
- 檢視使用者的資料佔用的空間大小
- 如何設計一個好玩的競技遊戲——結構時間軸與戰鬥時間軸遊戲
- 【演算法資料結構Java實現】時間複雜度為O(n)的最大和序列演算法資料結構Java時間複雜度
- 關於時間、物質結構、四維空間的猜想
- poj 3468 區間更新 整個區間加一個數和區間求和操作
- 資料結構與演算法(一):帶你瞭解時間複雜度和空間複雜度到底是什麼?資料結構演算法時間複雜度
- 資料結構~時間複雜度資料結構時間複雜度
- 資料結構:時間複雜度資料結構時間複雜度
- 如何使Xcode佔用更少的空間 Xcode佔用空間太大解決方法XCode
- 備份與恢復--一個表空間能否被多個資料庫同時開啟?資料庫
- 查詢一個表插入資料的時間,按BLOCK時間BloC