LeetCode日记–1207. Unique Number of Occurrences

发布于 2020-10-28  113 次阅读


碎碎念:NUS的bar比我想象中高好多啊。。除了语言,很多东西都还要努力呢。。

题目如下:

Given an array of integers arr, write a function that returns true if and only if the number of occurrences of each value in the array is unique.

Example 1:

Input: arr = [1,2,2,1,1,3]
Output: true
Explanation: The value 1 has 3 occurrences, 2 has 2 and 3 has 1. No two values have the same number of occurrences.

Example 2:

Input: arr = [1,2]
Output: false

Example 3:

Input: arr = [-3,0,1,-3,1,1,1,-3,10,0]
Output: true

思路:

其实没啥好说的,就是使用hashMap记录每个数的出现频率,然后比较有没有出现频率一样的。

不过我在stackOverflow里面看到一个骚方法,可以比较hashMap里面有没有重复的value。

分别使用List和Set存放包含所有value的collection。然后比较size是否相等就可以知道有没有重复的值了。

// pseudo-code
List<T> valuesList = map.values();
Set<T> valuesSet = new HashSet<T>(map.values());
// check size of both collections; if unequal, you have duplicates

代码如下

class Solution {
    public boolean uniqueOccurrences(int[] arr) {
        HashMap<Integer,Integer> frequancyOfNum = new HashMap <Integer,Integer>();
        for(int i=0;i<arr.length;i++){
            if (frequancyOfNum.containsKey(arr[i])){
                int temp = frequancyOfNum.get(arr[i]);
                frequancyOfNum.replace(arr[i],temp,temp+1);
            }
            else
                frequancyOfNum.put(arr[i],1);
        }
        List<Integer> valuesList = new ArrayList<Integer>(frequancyOfNum.values()) ;
        Set<Integer> valuesSet = new HashSet<Integer>(frequancyOfNum.values());
        if(valuesList.size()==valuesSet.size())
            return true;
        else
            return false;
    }
}

你好哇!欢迎来到雷公马碎碎念的地方:)