我一上来面试官就让我写一个代码
我以为的是1 3 3 1 4 第一个达到次数的是3 但他说是1,是按照存入的顺序来算的。
例如:
输入:1 3 4 1 3
输出:1
输入:1 3 3 1 4
输出:1
输入:3 1 1 4 3
输出:3
思路:
一开始就想到了用HashMap,Key值存储数字,Value代表出现的次数,然后遍历找出Value最大的值,但是后来实现的时候行不通。
代码实现:
public static int find(int[] num) {int count=1;//数字出现的次数Map<Integer,Integer> m=new HashMap<>();for (int i=0;i<num.length;i++){ainsKey(num[i])){m.put(num[i],m.get(num[i])+1);}else{m.put(num[i],count);}}int result=0;int most=0;//找出map中出现次数最多的元素Iterator iterSet().iterator();while(iter.hasNext()){Map.Entry entry =(Map.();int key=(Key();int val=(Value();if(val>most){result=key;most=val;}}return result;}
}
上面这个代码是错误的,比如输入代码 3 3 1 1 5 它返回的还是1 而不是3,所以有点错误
新思路如下:
一般使用map用的最多的就是HashMap,但是HashMap里面的元素是不按添加顺序的,那么除了使用HashMap外,还有什么map接口的实现类可以用呢?这里有2个,treeMap和linkedHashMap,但是,要达到我们的要求:按添加顺序保存元素的,就只有LinkedHashMap。
代码实现:
public static int find(int[] data) {int count = 1;//数字出现的次数//使用Map 把他们接收 LinkedHashMap会按存入的顺序排序Map<Integer, Integer> map = new LinkedHashMap<>();for (int i = 0; i < data.length; i++) {if (ainsKey(data[i])) { //如果map中的key包含数组中的第i个元素//就把他出现的次数 place(data[i], (data[i]),(data[i]) + 1);} else {//如果没有的话 就新增//然后数字对应的次数为1次map.put(data[i], count);}}int result = 0; //Kint most = 0; //找出map中出现次数最多的元素 VIterator iterator = Set().iterator();//遍历集合,然后开始判断集合中出现次数最多的元素是哪个while (iterator.hasNext()) {Map.Entry entry = (Map.Entry) ();int key = (Integer) Key();int val = (Integer) Value();//1-2 3-2 4-1if (val > most) {result = key;most = val;}}return result;
}
本文发布于:2024-01-30 14:29:28,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170659617020664.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |