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 ));
}
}
3秒搞定!~~ 一亿数据获取前100个最大值相关推荐
- 获取一亿数据获取前100个最大值
package cn.usst.tophundred.quicksort; import java.util.Random; /** 获取一亿数据获取前100个最大值 1. 假设数组为 array[N ...
- wpspbc按钮是什么意思_10秒搞定 超简单的PBC按钮配置法
10秒搞定 超简单的PBC按钮配置法 PBC按钮配置的实现方法非常简单,前两步设置与输入PIN码法设置相同,即打开无线网卡的应用程序,选择需要接入的无线网络,然后点击"WPS"按钮 ...
- 浙江金华“刷脸看病”,挂号付款20秒搞定!
资讯来源:浙江新闻 编辑:大和智付 版权说明:版权归原作者与平台所有,如有侵权,请联系删除. 浙江市卫健委信息中心介绍,目前市中医医院.市人民医院.市中心医院都已经上线"刷脸看病" ...
- 杭州一高中推刷脸吃饭:8秒搞定;乌海市与上海荷福签署合作协议 进入人工智能矿业安全领域...
北汽与百度签署战略合作打造"人工智能+汽车"生态 雷锋网 AI 掘金志消息,10月13日,北汽集团与百度战略合作协议签约仪式在北京汽车产业研发基地举行.北汽集团党委书记.董事长徐和 ...
- mvvm怎么让光标制定属性的文本框_Word怎么快速制作斜线表头?10秒搞定,表格颜值直线上升...
Word怎么快速制作斜线表头?这个问题可能困扰着很多刚进入职场的小伙伴.不管是文员是一线工作人员,工作中或多或少都会涉及斜线表头的制作. 因此,今天就给大家分享一下制作斜线表头的方法,而在Word中斜 ...
- 那些一秒搞定微软公司Excel的神操作(上)!
微软公司的Excel是Microsoft为使用Windows和Apple Macintosh操作系统的电脑编写的一款电子表格软件.直观的界面.出色的计算功能和图表工具,使Excel成为最流行的个人计算 ...
- 如何从华为P20导出视频到计算机,华为P20怎样投屏到投影仪?10秒搞定,投屏后媲美电脑!...
原标题:华为P20怎样投屏到投影仪?10秒搞定,投屏后媲美电脑! 欢迎转载,请注明出处,抄袭必究! 华为P20 的PC模式,原来有简单了解过,以为只是一个普通的投屏功能而已,这几天体验了一翻,才发现其 ...
- 小米鼠标,蓝牙鼠标MiMouse ,电脑搜不到怎么办?一秒搞定
小米鼠标蓝牙搜索不到MiMouse 一秒搞定 打开底盖上电池 按中间按钮蓝色灯为蓝牙模式 蓝牙鼠标,电脑搜不到怎么办? 解决办法: 发现鼠标灯一直不间断的闪,就是连不上.然后我长按鼠标灯几秒,蓝牙马上 ...
- 批处理dir 保存到变量中_批处理|看大神如何教您30秒搞定批量提取文件名!
本文转自公号:UX2088|冰枫大叔 大家好,我是冰叔,又有好几个火星时间没见啦!那么冰叔今天给大家带来的是什么呢?带来的是我们日常工作当中经常会使用到的一项任务,那就是|批|量|提|取|文|件|名| ...
最新文章
- 中国顶级黑客45秒使用声音来破坏您的计算机
- TensorFlow 输出tensor数据
- 【Java】阿里巴巴java开发手册总结(我能看懂的)
- 【2017-05-30】WebForm文件上传。从服务端删除文件
- 函授计算机与科学论文,函授计算机科学与技术论文
- 高并发之--Guava Cache
- 2top 存储过程 查看_S7-1500 PLC的存储区
- Linux命令执行顺序
- MTKP60 vs MSM 660
- Effective C++_笔记_条款06_若不想使用编译器自动生成的函数,就该明确拒绝
- 前端请求后端数据的三种方式
- Thread源码-----传实现了Runnable接口的类的实例给Thread的作用
- 【Ubuntu】在Ubuntu 12.04 LTS上安装JDK6
- 深度装机大师一键重装_做好电脑重装系统前后的这些注意事项,让你从此摆脱装机忧愁!...
- [origin ‘http://xxx.xxx.com:xxxx‘ has been blocked by CORS policy: The request client is not a secur
- 扇形面积公式推导过程
- 电商网站产品结构数据库设计
- Vue的生命周期钩子函数之activated
- Java:从1循环到150,在每行打印一个值,另外在每个3的倍数行上打印出foo“,在每个5的倍数行上打印“biz“,在每个7的倍数行上打印“baz“
- Zbrush学习笔记
热门文章
- 第十三节: EF的三种模式(三) 之 来自数据库的CodeFirst模式
- 一步步编写操作系统 46 linux的elf可执行文件格式1
- 依赖注入和控制反转的理解,写的太好了。
- php聊天室技术,PHP聊天室技术
- est.java 2 错误 找不到符号_找不到Cython/Python符号PyString\u Typ
- 一键锁屏_ios快捷指令一键登录校园网(桂航为例,哆点认证)
- 记录今天写的几个正则,数字范围的校验
- 【Python学习】 - sklearn - 用于生成数据的make_blobs模块
- 【牛客 - 551F】CSL 的神奇序列(推公式,猜结论,母函数)
- linux新建samba账户,ubuntu上创建账户和samba用户