Welcome to Subscribe On Youtube
Formatted question description: https://leetcode.ca/all/1394.html
1394. Find Lucky Integer in an Array
Level
Easy
Description
Given an array of integers arr
, a lucky integer is an integer which has a frequency in the array equal to its value.
Return a lucky integer in the array. If there are multiple lucky integers return the largest of them. If there is no lucky integer return -1.
Example 1:
Input: arr = [2,2,3,4]
Output: 2
Explanation: The only lucky number in the array is 2 because frequency[2] == 2.
Example 2:
Input: arr = [1,2,2,3,3,3]
Output: 3
Explanation: 1, 2 and 3 are all lucky numbers, return the largest of them.
Example 3:
Input: arr = [2,2,2,3,3]
Output: -1
Explanation: There are no lucky numbers in the array.
Example 4:
Input: arr = [5]
Output: -1
Example 5:
Input: arr = [7,7,7,7,7,7,7]
Output: 7
Constraints:
1 <= arr.length <= 500
1 <= arr[i] <= 500
Solution
Use a map to store each number’s frequency. Then loop over all entries in the map. If a number’s frequency equals the number, update the largest lucky number. If a lucky number exists, return the largest one. If no lucky number is met, return -1.
-
class Solution { public int findLucky(int[] arr) { Map<Integer, Integer> map = new HashMap<Integer, Integer>(); for (int num : arr) { int count = map.getOrDefault(num, 0) + 1; map.put(num, count); } int luckyNumber = -1; Set<Integer> keySet = map.keySet(); for (int num : keySet) { int count = map.get(num); if (count == num) luckyNumber = Math.max(luckyNumber, num); } return luckyNumber; } }
-
class Solution: def findLucky(self, arr: List[int]) -> int: counter = Counter(arr) ans = -1 for num, n in counter.items(): if num == n and ans < num: ans = num return ans
-
class Solution { public: int findLucky(vector<int>& arr) { int n = 510; vector<int> counter(n); for (int e : arr) ++counter[e]; int ans = -1; for (int i = 1; i < n; ++i) { if (i == counter[i] && ans < i) ans = i; } return ans; } };
-
func findLucky(arr []int) int { n := 510 counter := make([]int, n) for _, e := range arr { counter[e]++ } ans := -1 for i := 1; i < n; i++ { if i == counter[i] && ans < i { ans = i } } return ans }
-
function findLucky(arr: number[]): number { const cnt = new Array(510).fill(0); for (const x of arr) { ++cnt[x]; } let ans = -1; for (let x = 1; x < cnt.length; ++x) { if (cnt[x] === x) { ans = x; } } return ans; }
-
class Solution { /** * @param Integer[] $arr * @return Integer */ function findLucky($arr) { $max = -1; for ($i = 0; $i < count($arr); $i++) { $hashtable[$arr[$i]] += 1; } $keys = array_keys($hashtable); for ($j = 0; $j < count($keys); $j++) { if ($hashtable[$keys[$j]] == $keys[$j]) $max = max($max, $keys[$j]); } return $max; } }