一个整型数组中有一半以上的数是相同的,如何找到这个数

墙角在唱歌 2012-03-03 08:30:15
一个整型数组中有一半以上的数是相同的,如何找到这个数? 用效率最高的方法, Arrays.sort(a,0,a.length);
...全文
507 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
墙角在唱歌 2012-03-03
  • 打赏
  • 举报
回复
多谢了,我试试看,但是我刚才的那种方式也可以求出来吧?
MiceRice 2012-03-03
  • 打赏
  • 举报
回复
为性能考虑,可以做一个内部类,避免每次计数都要创建Integer对象,类似于:

private static class Counter {
private int cnt;
public Counter inc() {
cnt++;
return this;
}
public int value() {
return cnt;
}
public String toString() {
return String.valueOf(cnt);
}
}


这样循环可以简化:

Map<Integer, Counter> mapCounter = new HashMap<Integer, Counter>();
for (int i = 0; i < a.length; i++) {
Counter cnt = mapCounter.get(a[i]);
if (cnt == null) {
cnt = new Counter();
mapCounter.put(words[i], cnt.inc());
} else {
cnt.inc();
if (cnt.value() >= a.length / 2) break; // 找到了
}
}
MiceRice 2012-03-03
  • 打赏
  • 举报
回复
其实如果是我的话,根本不排序。

直接建立一个HashMap<Integer, Integer>

然后for(int i=0; i<a.length; i++) {
key就是i,value就是出现次数
某次检查发现value >= a.length,就说明已经找到了
}
墙角在唱歌 2012-03-03
  • 打赏
  • 举报
回复
帮忙解答一下下一步该怎么求出数组中出现一半以上的那个数?
墙角在唱歌 2012-03-03
  • 打赏
  • 举报
回复
目前我的代码是这样的
int a[] = { 1, 2, 3, 5, 6, 2, 2, 2 };
for (int i = 0; i < a.length; i++) {
Arrays.sort(a, 0, a.length);
System.out.println(a[i]);
}
我先排完序了就是不知道该怎样获取2.
yaoweijq 2012-03-03
  • 打赏
  • 举报
回复
微软技术面试心得 寻找发帖水王
一节的基础题么
原书上标准解法是O(n)+常数内存
MiceRice 2012-03-03
  • 打赏
  • 举报
回复
我换个方式表述下你的问题:
“一个整型数组中,有一半以上的数是相同的,且其它数字都是绝对不相同的。”
是这样么?


那么似乎二分查找跟顺序查找的性能应该也没有什么差异,这个算法的主要问题是一开始都没有找的目标。
墙角在唱歌 2012-03-03
  • 打赏
  • 举报
回复
关键是我想用二分法得出这个数?
Acesidonu 2012-03-03
  • 打赏
  • 举报
回复
排完序,中间那个就是

62,634

社区成员

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

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