1207. 独一无二的出现次数『简单』

题目来源于力扣(LeetCode

一、题目

1207. 独一无二的出现次数

题目相关标签:哈希表

提示:

  • 1 <= arr.length <= 1000
  • -1000 <= arr[i] <= 1000

二、解题思路

2.1 哈希表

  1. 遍历 arr 数组,用哈希表记录下每个数组元素出现的次数

  2. 遍历哈希表,通过 map.containsValue() 方法判断哈希表中的值是否存在重复

    判断前,需要将本次遍历的值修改为 0

2.2 哈希表 + Set 去重

  1. 遍历 arr 数组,用哈希表记录下每个数组元素出现的次数

  2. 记录下哈希表中值的个数 size

  3. 通过 new HashSet<>(map.values()) 来创建 Set 集合

  4. 因 Set 集合自带去重效果,最后判断 Set 集合的元素个数与 size 是否相等

  5. 相等即说明各数组元素出现的次数均不相同

三、代码实现

3.1 哈希表

public static boolean uniqueOccurrences(int[] arr) {
    Map<Integer, Integer> map = new HashMap<>();
    for (int i = 0; i < arr.length; i++) {
        // 将数字与其出现的次数存储到 map 中
        map.put(arr[i], map.getOrDefault(arr[i], 0) + 1);
    }
    Set<Integer> set = map.keySet();
    for (Integer i : set) {
        int j = map.get(i);
        // 令 i 的值为 0
        map.put(i, 0);
        // 修改 i 的值后再判断 i 之前的值是否还存在,存在则说明重复
        if (map.containsValue(j)) {
            return false;
        }
    }
    return true;
}

3.2 哈希表 + Set 去重

public static boolean uniqueOccurrences(int[] arr) {
    Map<Integer, Integer> map = new HashMap<>();
    for (int i = 0; i < arr.length; i++) {
        // 将数字与其出现的次数存储到 map 中
        map.put(arr[i], map.getOrDefault(arr[i], 0) + 1);
    }
    int size = map.values().size();
    int setSize = new HashSet<>(map.values()).size();  // set集合去重
    return size == setSize;
}

四、执行用时

4.1 哈希表

4.2 哈希表 + Set 去重

五、部分测试用例

public static void main(String[] args) {
    int[] arr = {1, 2, 2, 1, 1, 3};  // output: true
//    int[] arr = {1, 2};  // output: false
//    int[] arr = {-3, 0, 1, -3, 1, 1, 1, -3, 10, 0};  // output: true

    boolean result = uniqueOccurrences(arr);
    System.out.println(result);
}
posted @ 2020-06-21 19:07  知音12138  阅读(106)  评论(0编辑  收藏