[LeetCode 1207] 独一无二的出现次数 请大家过目

随便写了一下, 我的写法可能有些同学会看不懂 :yum:
这是我写的ipynb文件

问题

给你一个整数数组 arr,请你帮忙统计数组中每个数的出现次数。
如果每个数的出现次数都是独一无二的,就返回 true;否则返回 false。
示例 1:

输入:arr = [1,2,2,1,1,3]
输出:true
解释:在该数组中,1 出现了 3 次,2 出现了 2 次,3 只出现了 1 次。没有两个数的出现次数相同。
示例 2:

输入:arr = [1,2]
输出:false
示例 3:

输入:arr = [-3,0,1,-3,1,1,1,-3,10,0]
输出:true

提示:

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

方法一:哈希表

  1. 首先使用哈希表记录每个数字的出现次数;
  2. 随后再利用新的哈希表,统计不同的出现次数的数目。
  3. 如果不同的出现次数的数目等于不同数字的数目,则返回 true,否则返回false

1. C++ code

class Solution {
public:
  bool uniqueOccurrences(vector<int>& nums) {
    map<int, int> records;
    for (int num: nums) {
      records[num] += 1;
    }

    set<int> times;

    for (auto & p: records) {
      times.insert(p.second);
    }

    return times.size() == records.size();

  }
};

2. Julia code

function uniqueOccurrences(nums::Vector{Int})::Bool
    records = Dict{Int, Int}()
    combinefn1(r, x) = begin
        r[x] = get(r, x, 0) + 1
        r
    end

    reduce(combinefn1, nums; init = records)

    times = Set{Int}()
    combinefn2(r, x) = push!(r, x)
    reduce(combinefn2, values(records); init = times)

    return length(times) == length(records)
end

ps: 好像直接传ipynb文件就好了,代码,说明,测试都写到上面去,
一步搞定 @Jun

1 个赞
using StatsBase

function uniqueOccurrences(lst::Vector{Int})::Bool
    times = countmap(lst)
    length(unique(values(times)))==length(values(times))
end

2 个赞