时间限制:1000ms
内存限制:256M
题目描述:
青书抽奖活动,抽奖箱里有很多球,每个球上有个整数,相同数字的球可重复多次出现,每个员工抽一个,如果一个球上的数字和这个球被抽到的次数相同,那这个球称为幸运球,如果出现多个幸运球,则幸运球数字最大的为最终获奖幸运球,抽到该球的员工获得奖品。现在要找到返回最终获奖幸运球数字,如果没有返回 -1。
例如:抽到的球数字是
1 1 2 2 3 4 4 4 4 5 6
则幸运球为
4
号球
输入描述:
幸运数字数组
输出描述:
幸运数字
示例:
输入
1,1,2,2,3,4,4,4,4,5,6
输出
4
题目分析:
该编程目标是 获取数字出现的最大重复次数,故可使用 Map
结构的 key
存放 数字, value
存放 次数。
代码实现:
package 幸运数字;
import java.util.*;
/**
* @author 江七
* @version 1.0
* @date 2021/9/30 9:35
*/
public class Main {
public static void main(String[] args) {
// 如果有其他情况需要判断 可修改示例代码
Scanner cin = new Scanner(System.in);
String str1 = cin.next();
String[] split1 = str1.split(",");
int[] arr = new int[split1.length];
for (int i = 0; i < split1.length; i++) {//将字符串数组转换为数字数组
arr[i] = Integer.parseInt(split1[i]);
}
int lucky = findLucky(arr);
System.out.println(lucky);
}
// 请补齐方法
public static int findLucky(int[] arr) {
Map<Integer,Integer> map = new HashMap<>();//存放对应数字的重复次数
if(arr == null||arr.length<=0){
return -1;
}
for(int i = 0 ; i < arr.length;i++){
if(map.containsKey(arr[i])){//如果重复,value值加一
map.put(arr[i],map.get(arr[i])+1);
}else{//不重复,就直接添加
map.put(arr[i],1);
}
}
List<Map.Entry<Integer,Integer>> list = new ArrayList(map.entrySet());//将map转换成list,好寻找最大值
Collections.sort(list,(o1, o2)->(o2.getValue()-o1.getValue()));//利用Collections工具类进行排序
//获取最大value值对应的key
return list.get(0).getKey();
}
}