快速查找排前面100的数!速度特快

luozhangwen 2010-04-21 07:58:40

package com.huawei.lzw.test;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

public class Test {
public static void main(String[] args) {
int[] arr = Test.getData(10);

long begin = System.currentTimeMillis();
Test.findTop(arr, 2);
long end = System.currentTimeMillis();
System.out.println("耗时:" + (end - begin) + "毫秒");
}

public static void findTop(int[] arr, int topCount) {
int maxVal = Integer.MIN_VALUE;
for (int i = 0; i < arr.length; i++) {
if (arr[i] > maxVal) {
maxVal = arr[i];
}
}
int[] tempArr = new int[maxVal + 1];

for (int i = 0; i < arr.length; i++) {
// System.out.println(arr[i] + "--" + tempArr[arr[i]]);
tempArr[arr[i]] = tempArr[arr[i]] + 1;
}

List<Integer> result = new ArrayList<Integer>();
for (int i = maxVal; i >= 0; i--) {
if (tempArr[i] >= 1) {
if (tempArr[i] == 1 && result.size() < topCount) {
result.add(i);
} else {
for (int j = 0; j < tempArr[i] & result.size() < topCount; j++) {
result.add(i);
}
}
}
}
System.out.println(result);
}

public static int[] getData(int n) {
int[] datas = new int[n];
for (int i = 0; i < n; i++) {
datas[i] = new Random().nextInt(n);
}
return datas;
}
}

...全文
182 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
groovy2007 2010-04-22
  • 打赏
  • 举报
回复
对于double类型的数据怎么办呢
  • 打赏
  • 举报
回复
tempArr[arr[i]]

如果 arr[i] 最大的数是 Integer.MAX_VALUE!

23,405

社区成员

发帖
与我相关
我的任务
社区描述
Java 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧