扬州市邗江区建设局网站,做直播网站一定要idc吗,我要啦 支持wordpress,微网页制作专业公司3秒搞定#xff01;~~ 一亿数据获取前100个最大值
整合网络上的算法。 根据我的思路。计算一亿个数字中最大的前100个值。
昨晚效率还是很低。 今天搞的算法。 只需要3秒钟。 获取前100个 前1000个 速度都非常快。 算法原理#xff1a;
把一亿个数字的前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/7532018package 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 (max1); i) {str.append(i\t\n);if(i%10000000){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 bwnew 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/7532018public 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/7532018public static void sort(int[] array){ for(int i 0; i array.length - 1; i){ //当前值当作最小值 int min array[i]; for(int j i1; j array.length; j){ if(minarray[j]){ //如果后面有比min值还小的就交换 min array[j]; array[j] array[i]; array[i] min; } } } } } 一亿个数字判断其中相同数字的办法 一亿个数字判断其中相同数字的办法
package com.my.util; //http://blog.csdn.net/yjflinchongpublic 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%320?total/32:total/321;int [] mBitsnew int[size];for(int i0;itotal;i) {int num getNum(i);if(get(mBits,num)) {System.out.println(num);break;}set1(mBits,num);}}//http://blog.csdn.net/yjflinchongpublic int getNum(int i) {//设定模拟重复的那个数字 fnumif(i(fnum1)){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 ));} }