LeetCode 1394. 找出数组中的幸运数

  • 2020 年 4 月 10 日
  • 筆記

题目

1394. 找出数组中的幸运数[1]

描述

在整数数组中,如果一个整数的出现频次和它的数值大小相等,我们就称这个整数为「幸运数」。    给你一个整数数组 arr,请你从中找出并返回一个幸运数。    如果数组中存在多个幸运数,只需返回 最大 的那个。  如果数组中不含幸运数,则返回 -1 。    示例 1:    输入:arr = [2,2,3,4]  输出:2  解释:数组中唯一的幸运数是 2 ,因为数值 2 的出现频次也是 2 。  示例 2:    输入:arr = [1,2,2,3,3,3]  输出:3  解释:1、2 以及 3 都是幸运数,只需要返回其中最大的 3 。  示例 3:    输入:arr = [2,2,2,3,3]  输出:-1  解释:数组中不存在幸运数。  示例 4:    输入:arr = [5]  输出:-1  示例 5:    输入:arr = [7,7,7,7,7,7,7]  输出:7  

解题思路

  1. 定义一个集合set,用于存放幸运数;
  2. 两次遍历数组,同时在定义一个变量count用于计数;
  3. 判断频次和数值大小是否相等,相等则加入集合set
  4. 跳出循环后,判断集合set是否为空,不为空则返回集合中的最大值;
  5. 默认返回-1,即数组中不含幸运数;

实现

package Array;    import java.util.Collections;  import java.util.HashSet;  import java.util.Set;    /**   * Created with IntelliJ IDEA.   * Version : 1.0   * Author  : cunyu   * Email   : [email protected]   * Website : https://cunyu1943.github.io   * Date    : 2020/4/3 15:21   * Project : LeetCode   * Package : Array   * Class   : OneThreeNineFour   * Desc    : 1394. 找出数组中的幸运数   */  public class OneThreeNineFour {  	public static void main(String[] args) throws Exception {  		int[] arr = {2};  		OneThreeNineFour oneThreeNineFour = new OneThreeNineFour();  		System.out.println(oneThreeNineFour.findLucky(arr));  	}    	public int findLucky(int[] arr) {  		Set<Integer> set = new HashSet<>();  		for (int i = 0; i < arr.length; i++) {  			int count = 0;  			for (int j = 0; j < arr.length; j++) {  				if (arr[i] == arr[j]) {  					count++;  				}  			}  			if (count == arr[i]) {  				set.add(count);  			}  		}    		if (!set.isEmpty()) {  			return Collections.max(set);  		}  		return -1;  	}  }  

参考资料

[1] 1394. 找出数组中的幸运数: https://leetcode-cn.com/problems/find-lucky-integer-in-an-array/