一個較好的方法:先拿出10000個建立小根堆,對於剩下的元素,如果大於堆頂元素的值,刪除堆頂元素,再進行插入操作,否則直接跳過,這樣知道所有元素遍歷完,堆中的10000個就是最大的10000個。時間復雜度: m + (n-1)logm = O(nlogm) 優化的方法:可以把所有10億個數據分組 ...
最小堆 最小堆是一種完全二叉樹,特點是根節點比兩個子節點都小 或者根節點比子節點都大 過程 先找 個數構建最小堆 依次遍歷 億個數,如果比最小堆的最小值大,則替換這個最小值,並重新構建最小堆 最后輸入 個值 時間復雜度 構建最小堆的復雜度為 logn,求出最大m個數會構建m次最小堆,時間復雜度為 m logm, 這里m為 進行n次時間復雜度為n,這里n為 億,總時間復雜度為 n m logm,即 ...
2018-05-01 10:53 0 2403 推薦指數:
一個較好的方法:先拿出10000個建立小根堆,對於剩下的元素,如果大於堆頂元素的值,刪除堆頂元素,再進行插入操作,否則直接跳過,這樣知道所有元素遍歷完,堆中的10000個就是最大的10000個。時間復雜度: m + (n-1)logm = O(nlogm) 優化的方法:可以把所有10億個數據分組 ...
版權聲明:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/jj12345jj198999/article/details/17169559 ...
前兩天面試3面學長問我的這個問題(想說TEG的3個面試學長都是好和藹,希望能完成最后一面,各方面原因造成我無比想去鵝場的心已經按捺不住了),這個問題還是建立最小堆比較好一些。 先拿10000個數建堆,然后一次添加剩余元素,如果大於堆頂的數(10000中最小的),將這個數替換堆頂 ...
從10000個整數中找出最大的10個,最好的算法是什么? 算法一:冒泡排序法 千里之行,始於足下。我們先不說最好,甚至不說好。我們只問,如何“從10000個整數中找出最大的10個”?我最先想到的是用冒泡排序的辦法:我們從頭到尾走10趟,自然會把最大的10個數找到。方法簡單,就不再這里寫 ...
輸入10個整數,將其中最小的數與第一個數對換, 把最大的數與最后一個數對換。 點我看視頻講解+可運行代碼,記得收藏視頻,一鍵三連 寫3個函數: ①輸人10個數; ②進行處理; ③輸出10個數。 解題思路: 在進行數值逐個比較的同時找到最小值的空間地址以及最大值的空間地址,使用這兩個空間 ...
/* * Copyright (c) 2016, 安徽大學計算機科學與技術學院 * All rights reserved. * 作 者: 楊磊 * 完成日期:2016 年 12 月 29 日 * 問題描述: * 輸入10個整數,將其中最小的數和第一個數對換,把最大的數和最后一個數對換。 * 寫 ...
輸入10個整數,將其中最小的數與第一個數對換, 把最大的數與最后一個數對換 寫3個函數: ①輸人10個數; ②進行處理; ③輸出10個數。 解題思路: 在進行數值逐個比較的同時找到最小值的空間地址以及最大值的空間地址,使用這兩個空間中的數據最終與第一和最后數據進行對換即可。 答案: ...
/* * 輸入10個整數,將其中最小的數與第一個數對換,把最大的數與最后一個數對換。 * 編寫3個函數:(1)輸入10個數;(2)進行處理;(3)輸出10個數。 */ #include<iostream> using namespace std; /* * 用符號常量 ...