3秒搞定!~~ 一億數據獲取前100個最大值

3秒搞定!~~ 一億數據獲取前100個最大值

整合網絡上的算法。 根據我的思路。計算一億個數字中最大的前100個值。

昨晚效率還是很低。 今天搞的算法。 只需要3秒鐘。 獲取前100個 前1000個 速度都非常快。?


算法原理:

把一億個數字的前100個 首先放入數組。 然后把最小值放在ary[0]。

然后再,循環100到一億 之間的。 每次循環判斷當前數字是否大于ary[0]

?當大于時,當前數字放入ary[0] 并再次重構數組最小值進入ary[0]? 以此類推 。

當循環完這一億個數字后。 最大的前100個數字就出來了。


源碼分享地址:http://download.csdn.net/download/yjflinchong/4275241


騰訊面試題:一億數字獲取前100個最大的數字辦法

比較笨的辦法。效率有點低。 只是實現了功能。 期待牛人的算法。

我弄了個最佳方案 http://blog.csdn.net/yjflinchong/article/details/7533972??? 3秒就搞定了

一億數字獲取前100個最大的數字? 這個方案需要700秒

///http://blog.csdn.net/yjflinchong/article/details/7532018

package com.my.util;


import java.io.*;
import java.util.*;
import java.net.*;

public class WebTest {

?? ?public static int last = 333333333;
?? ?public static int max = 100000000;//數據總數
?? ?public static int sp = 1000000;//分割數據條數
?? ?public static int[] ary = new int[100];
?? ?
?? ?
?? ?public static void main(String[] args) {
?? ??? ?splitFile();
?? ??? ?Date d1 = new Date();
?? ??? ?find("d:/file/file.txt");
?? ??? ?System.out.println(Arrays.toString(ary)+"========");
?? ??? ?Date d2 = new Date();
?? ??? ?System.out.println(d2.getTime()-d1.getTime());
?? ?}
?? ?
?? ?
?? ?public static void splitFile(){
?? ??? ?StringBuffer str = new StringBuffer("");
?? ??? ?int num = 1;
?? ??? ?for (int i = 1; i < (max+1); i++) {
?? ??? ??? ?str.append(i+"\t\n");
?? ??? ??? ?if(i%1000000==0){
?? ??? ??? ??? ?appendToFile("d:/file/file.txt", str.toString());
?? ??? ??? ??? ?str = new StringBuffer("");
?? ??? ??? ??? ?num++;
?? ??? ??? ?}
?? ??? ?}
?? ??? ?appendToFile("d:/file/file.txt", last+"");
?? ?}

?? ?public static void appendToFile(String file,String text){
?? ??? ?try
?? ??? ?{
?? ??? ??? ?FileWriter fw =new FileWriter(file,true);
?? ??? ??? ?BufferedWriter bw=new BufferedWriter(fw);
?? ??? ?bw.write(text);
?? ??? ?bw.flush();
?? ??? ?}catch (Exception e) {
?? ??? ?} ?
?? ??? }? ?
?? ??? ?public static String readFile(String path){
?? ??? ??? ? StringBuffer str = new StringBuffer("");
?? ??? ??? ?try {
?? ???????????? String line = null;
?? ?????????? ?
?? ???????????? BufferedReader reader = new BufferedReader(new FileReader(path));
?? ???????????? while ((line = reader.readLine()) != null) {
?? ??????????? ??? ?str.append(line);
?? ???????????? }
?? ???????????? reader.close();
?? ???????? } catch (Exception e) {
?? ???????????? e.printStackTrace();
?? ???????? }
?? ???????? return str.toString();
?? ??? ?}
?? ??? ?public static void find(int[] bak){
?? ??? ??? ?for (int i = 0; i < bak.length; i++) {
?? ??? ??? ??? ?ary[0] = bak[i];
?????????? ??? ?sort(ary);
?? ??? ??? ?}
?? ??? ?}///http://blog.csdn.net/yjflinchong/article/details/7532018
?? ??? ?public static void find(String path){
?? ??? ??? ?try {///http://blog.csdn.net/yjflinchong/
?? ???????????? String line = null;
?? ???????????? BufferedReader reader = new BufferedReader(new FileReader(path));
?? ???????????? while ((line = reader.readLine()) != null) {
?? ??????????? ??? ?ary[0] = Integer.parseInt(line.trim());
?? ??????????? ??? ?sort(ary);
?? ???????????? }
?? ???????????? reader.close();
?? ???????? } catch (Exception e) {
?? ???????????? e.printStackTrace();
?? ???????? }
?? ??? ?}
?? ??? ?///http://blog.csdn.net/yjflinchong/article/details/7532018
?? ??? ?public static void sort(int[] array){ ?
?? ???????? for(int i = 0; i < array.length - 1; i++){ ?
?? ???????????? //當前值當作最小值 ?
?? ???????????? int min = array[i]; ?
?? ???????????? for(int j = i+1; j < array.length; j++){ ?
?? ???????????????? if(min>array[j]){ ?
?? ???????????????????? //如果后面有比min值還小的就交換 ?
?? ???????????????????? min = array[j]; ?
?? ???????????????????? array[j] = array[i]; ?
?? ???????????????????? array[i] = min; ?
?? ???????????????? } ?
?? ???????????? } ?
?? ???????? } ?
?? ???? } ?
?? ??? ?
?? ??? ?

}



一億個數字判斷其中相同數字的辦法

一億個數字判斷其中相同數字的辦法

package com.my.util;

//http://blog.csdn.net/yjflinchong
public class Test {
?? ?
?? ?int fnum = 21000000;
?? ?
?? ?public static void main(String[] args) {
?? ??? ?Test t = new Test();
?? ??? ?t.find();
?? ?}
?? ?
?? ?
?? ?public void find() {
?? ??? ?int total = 100000000;
?? ??? ?int size = total%32==0?total/32:total/32+1;
?? ??? ?int [] mBits=new int[size];
?? ??? ?for(int i=0;i<total;i++) {
?? ??? ??? ?int num = getNum(i);
?? ??? ??? ?if(get(mBits,num)) {
?? ??? ??? ??? ?System.out.println(num);
?? ??? ??? ??? ?break;
?? ??? ??? ?}
?? ??? ? ?? ?set1(mBits,num);
?? ??? ?}
?? ?}
?? ?//http://blog.csdn.net/yjflinchong
?? ?public int getNum(int i) {
?? ??? ?//設定模擬重復的那個數字 fnum
?? ??? ?if(i==(fnum+1)){
?? ??? ??? ?i--;
?? ??? ?}
?? ??? ?return i;
?? ?}
?? ?public void set1(int [] mBits, int pos) { ?
?? ??? ?int index = ( int )Math.floor(pos/32f);
?? ??? ?mBits[index] = mBits[index] | (1 <<(31-pos%32 ));
?? ?}
?? ?public boolean get(int [] mBits, int pos){ ?
?? ??? ?int index = ( int )Math.floor(pos/32f);
?? ??? ?return mBits[index] == (mBits[index] | 1 <<(31-pos% 32 ));
?? ? }

}



本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/451408.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/451408.shtml
英文地址,請注明出處:http://en.pswp.cn/news/451408.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

手把手JDK環境變量配置

分為下載&#xff0c;配置&#xff0c;驗證三個步驟解釋如何進行JDK環境變量配置。 步驟一&#xff1a; 首先查看配置成功后的效果&#xff1a; tip:點擊win——>運行&#xff08;或者使用winr,或者shift鼠標右鍵打開powershell&#xff09;——>輸入cmd回車——>控制…

網易NEI在面臨前后端分離問題,所提供的完整解決方案

內容來源&#xff1a;2018 年 1 月5 日&#xff0c;網易NEI產品負責人包勇明在“2018移動技術創新大會”進行《網易高效多端應用協作開發實踐》演講分享。IT 大咖說&#xff08;微信id&#xff1a;itdakashuo&#xff09;作為獨家視頻合作方&#xff0c;經主辦方和講者審閱授權…

如何使用js動態顯示或隱藏DIV

在web頁面中&#xff0c;經常需要使用select控件來顯示div的顯示與隱藏&#xff0c;實現這個方法主要用到了setAttribute方法&#xff0c;以下為示例代碼 [html] view plaincopy <html> <title>通過選擇項顯示不同的結果</title> <head> <scr…

myeclipse進入Myeclipse configuration center 如何關閉

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 找到這個圖標&#xff0c;放上去顯示return即可關閉&#xff0c;隱藏很深有木有

程序員保持身心健康的八種方式

程序員是一個辛苦的行業&#xff0c;長時間面對的只是需要解決的問題&#xff0c;更不要提開發期限和無理取鬧的客戶了&#xff0c;這樣的工作簡直無以承受。怎么辦呢我們&#xff1f;我們熱愛編程&#xff0c;樂于創建功能……我們喜歡那種將一堆代碼弄成像Facebook或者Digg那…

[No0000166]CPU的組成結構及其原理

中央處理器(Central Processing Unit, CPU)CPU的基本架構和工作原理其實百科上講得已經相當清楚了&#xff0c;不過我覺得有些事情呢還是給個例子出來比較方便學習。本文會先從內存地址&#xff0c;計算機的一般架構之類的基礎知識出發&#xff0c;然后逐步為讀者"拼裝&qu…

Java 時間總結

轉載請標明出處&#xff1a;http://blog.csdn.net/zhaoyanjun6/article/details/80613024 本文出自【趙彥軍的博客】 時區 整個地球分為二十四時區&#xff0c;每個時區都有自己的本地時間。為了統一起見&#xff0c;使用一個統一的時間&#xff0c;稱為通用協調時(UTC, Univer…

js中的var是什么意思

聲明&#xff08;創建&#xff09; JavaScript 變量 在 JavaScript 中創建變量經常被稱為“聲明”變量。您可以通過 var 語句來聲明 JavaScript 變量&#xff1a;var x; var carname; 在以上聲明之后&#xff0c;變量并沒有值&#xff0c;不過您可以在聲明它們時向變量賦值&…

HTTP/2 協議入門

一、2015年&#xff0c; HTTP/2發布。 二、二進制協議 HTTP/2是一個二進制協議&#xff0c;頭信息和數據體都是二進制&#xff0c;并且統稱為“幀”&#xff08;frame&#xff09;,頭信息幀和數據幀。 二進制協議的一個好處是&#xff0c;可以定義額外的幀。HTTP/2定義了近1…

態度決定高度

“一個將什么都不放在眼里的人&#xff0c;他的未來一定是一片黑暗&#xff0c;因為他什么都看不到”。知識的獲得和能力的鍛煉是個一點一滴慢慢積累的過程&#xff0c;這個過程需要我們端正態度&#xff0c;俯身求教。好高騖遠一直都是很多人容易犯的錯誤&#xff0c;這樣導致…

中間件技術是什么?

&#xff08;一&#xff09;舉例說明&#xff1a; 我開了一家炸雞店&#xff08;業務端&#xff09;&#xff0c;然而周邊有太多屠雞場&#xff08;底層&#xff09;&#xff0c;為了成本我肯定想一個個比價&#xff0c;再綜合質量挑選一家屠雞場合作&#xff08;適配不同底層邏…

4.10/4.11/4.12 lvm講解 4.13 磁盤故障小案例

2019獨角獸企業重金招聘Python工程師標準>>> 準備磁盤分區 fdisk /dev/sdb n 創建三個新分區&#xff0c;分別1G t 改變分區類型為8e 準備物理卷 pvcreate /dev/sdb1 pvcreate /dev/sdb2 pvcreate /dev/sdb3 pvdisplay/pvs 列出當前的物理卷 pvremove /dev/sdb3 刪除…

《Effective Java》 第一講:創建和銷毀對象

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 一、用靜態工廠方法代替構造器 用靜態工廠的優點 &#xff1a; 1. 方法有名字&#xff0c;更好理解。 2.不必每次調用的時候都創建一…

外圍功能電路控制 LET′S TRY“嵌入式編程”: 4 of 6

外圍功能電路控制 LET′S TRY“嵌入式編程”: 4 of 6本連載講解作為嵌入式系統開發技術人員所必需具備的單片機的基礎知識。 在《單片機入門&#xff08;1&#xff09;&#xff5e;&#xff08;3&#xff09;》中&#xff0c;我們一起學習了單片機的硬件和編程語言以及開發環境…

如何防止代碼腐爛

很多團隊都有這個問題&#xff0c;一個項目的代碼本來開始設計得好好的&#xff0c;一段時間以后&#xff0c;代碼就會變得難以理解&#xff0c;難以維護&#xff0c;難以修改。為什么&#xff1f;我一直在思考這個問題。 讓我們先看一個人的情況。 1. 程序員的成長 新手的代碼…

什么是商業智能(BI),以及其與數據分析的區別?

BI&#xff08;Business Intelligence&#xff09;即商務智能&#xff0c;它是一套完整的解決方案&#xff0c;用來將企業中現有的數據進行有效的整合&#xff0c;快速準確地提供報表并提出決策依據&#xff0c;幫助企業做出明智的業務經營決策。它是一種產品/服務&#xff0c;…

php課程 4-15 數組遍歷、超全局數組、表單提交數據(多看學習視頻)

php課程 4-15 數組遍歷、超全局數組、表單提交數據&#xff08;多看學習視頻&#xff09; 一、總結 一句話總結&#xff1a;超全局數組特別有用&#xff0c;比如$_SERVER可以獲取所有的客戶端訪問服務器的情況。 1、數組遍歷三種方式&#xff08;最不熟悉的那一種&#xff09;…

git branch 分支

Git自學之路&#xff08;四&#xff09;- git branch 分支 幾乎所有的版本控制系統都以某種形式支持分支。 使用分支意味著你可以把你的工作從開發主線上分離開來&#xff0c;以免影響開發主線。 在很多版本控制系統中&#xff0c;這是一個略微低效的過程——常常需要完全創建一…

軟件工程師的十個“不職業”行為

職業化是軟件工程師的必然選擇。本文根據我在教學和軟件開發管理方面的實踐&#xff0c;列舉幾個軟件工程師“不職業”的行為或習慣&#xff0c;從另外一個側面進一步探討什么是真正的軟件工程師職業化。職業化之于軟件工程師非常重要。因為&#xff1a;軟件是看不見也摸不著的…

fn:substring()函數

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 fn:substring()函數返回字符串中指定開始和結束索引的子串。 語法 fn:substring()函數的語法如下&#xff1a; ${fn:substring(<s…