1.题目描述
在整数数组中,如果一个整数的出现频次和它的数值大小相等,我们就称这个整数为「幸运数」。
给你一个整数数组 arr,请你从中找出并返回一个幸运数。
如果数组中存在多个幸运数,只需返回 最大 的那个。 如果数组中不含幸运数,则返回 -1。
2.题目示例
3.思路及代码
- 思路一:利用计数排序
- 思路二:利用hashmap
- 代码实现(两个)
class Solution {
public int findLucky(int[] arr) {
// //利用计数排序的思想
// int[] map = new int[501];
// for(int i = 0;i<arr.length;i++){
// map[arr[i]]++;
// }
// for(int i = map.length-1; i > 0 ;i--){
// if(map[i]==i){
// return i;
// }
// }
// return -1;
//
// 利用hashmap,,不过由于此题规定了范围,并且范围很小,所以使用map效率不高
//主要利用键值相等来判断是否为幸运数
Map<Integer, Integer> map = new HashMap<>();
for(int i : arr)
//查看map是否有此值,没有就是默认值
map.put(i, map.getOrDefault(i, 0) + 1);
int res = -1;
for(int key : map.keySet()){//返回所有的key值列表
if(key == map.get(key))//键值是否相等
res = Math.max(res, key);
}
return res;
}
}