收录日期:2020/04/07 12:03:50 时间:2016/07/18 13:37:21 标签:Java SE
请问如何找出一个整型数组里重复次数最多的三个数?(要考虑次数相同的情况)谢谢!
先放到数据库里,然后:
select ID, count(ID) from TABLE order by count(ID) desc limit 0, 3;
把整型数组里的整数作为key放入哈希中,value=整数的个数。
插补进哈希的value加加
先排序,然后从前往后挨个数,始终保留当前最多的三个数(含重复)。
或者用commons-collections里的Bag数据结构,一堆数字丢进去,数一下每个数字出现了几个,找最多三个(和2楼思想差不多)。
能给个具体算法吗?
引用 2 楼 angel6709 的回复:
把整型数组里的整数作为key放入哈希中,value=整数的个数。
 插补进哈希的value加加
up hashmap
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.TreeMap;
import java.util.Map.Entry;

public class Test {
public static void main(String args[]) {
TreeMap<Integer, Integer> map = new TreeMap<Integer, Integer>();

int[] array = new int[] { 1, 2, 3, 2, 1, 2, 3, 4, 5, 6, 8, 5, 4, 5, 6,
9, 8, 2, 6, 5, 4 };
for (int a : array) {
if (!map.containsKey(a))
map.put(a, 0);
map.put(a, map.get(a) + 1);
}

//根据次数进行排序
TreeMap<Integer, ArrayList<Integer>> sortMap = new TreeMap<Integer, ArrayList<Integer>>(new Comparator<Integer>(){
@Override
public int compare(Integer o1, Integer o2) {
return o2 - o1;
}

});
for(Entry<Integer,Integer> e: map.entrySet()){
if( !sortMap.containsKey(e.getValue()))
{
sortMap.put(e.getValue(), new ArrayList<Integer>());
}
sortMap.get(e.getValue()).add(e.getKey());
}

int count = 3;
for(Entry<Integer,ArrayList<Integer>> e: sortMap.entrySet()){
List<Integer> list = e.getValue();
for (Integer i : list) {
if (count-- <= 0)
break;
System.out.println(i);
}


}

}


}
谢谢楼上的大哥给的精妙算法,不过不太看得懂^_^!主要是这段
 TreeMap<Integer, ArrayList<Integer>> sortMap = new TreeMap<Integer, ArrayList<Integer>>(new Comparator<Integer>(){
            @Override
            public int compare(Integer o1, Integer o2) {                
                return o2 - o1;
            }
            
        });
引用 7 楼 elia117 的回复:
谢谢楼上的大哥给的精妙算法,不过不太看得懂^_^!主要是这段
TreeMap <Integer, ArrayList <Integer>> sortMap = new TreeMap <Integer, ArrayList <Integer>>(new Comparator <Integer>(){
            @Override
            public int compare(Integer o1, Integer o2) {               
                return o2 - o1;
            }
           
        });


我认为是o2-o1的值
 如果不用到list,只用数组能够做吗,就是不用那些集合之类的用纯算法。
典型的hashmap使用题,到处都是
hashmap做起来最方便的,纯数组不是不行,麻烦
如果只用数组做比较,需要确保你要测试的数组中的值的个数是有限的,
比如你要测试数组a,它可能的值的个数N,然后新开一个数组b,长度为N,b[0]代表第一个可能的值的个数,b[1]代表第2个...b[N-1]是最后一个可能值的个数。
先遍历a,根据a[i]的值,将对应的b[x]值加1.
最后,获取b中数值最大的3个值所在的位置,即a中个数最多的3个值

一个CString处理的问题 如何在OLE中注册JPG格式 TSession CB bug?熟悉BDE者请进 adotable怎样批量提交? 整个adotable的“数据是否被修改”怎样得到? 高手帮忙!这个Sql语句我不会写。关于Group By 的 请问: 在哪里可以调试存储过程? 怎样调试! 搜索的问题:望大家指点~~~~ SOS! 有关Office Web组件方面的书之问题. 数据转换*.db到其他 有关EditMask控件触发的是哪个事件? 事件问题? 很奇怪的问题,期待高手…… 高手请进!这句SQL怎么写? 那种情况对数据库的执行效率影响较小? 常见问题解答: Exception in thread \"main\" java.lang.NoClassDefFoundError: HelloWorld 小女子有一棘手问题请教各位大侠!急 急 关于Jtable的问题(麻烦高手,很急) 请所有人进来看看,能解决的送500分! BDE BUG!?熟悉bde者请进 如何在活动目录设置dhcp服务器? 请问到什么站点下载ADO控件呢 数据窗口的小问题!!...........................在线等待!!! 9i安装问题(在线等) 请所有人进来看看,能解决的送500分! 在C#中如何给ActiveX control 传递ColeSafeArray参数? 用VB做数据库,生成单个记录窗体时老出错,是不是VB限制字段呀! 如何将一个整型的数\"5\"转换成VARIANT类型的变量va 求MSDN下载----急 如何測試某個網站中某個文件是否存在??