随便写了一下, 我的写法可能有些同学会看不懂
这是我写的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
方法一:哈希表
- 首先使用哈希表记录每个数字的出现次数;
- 随后再利用新的哈希表,统计不同的出现次数的数目。
- 如果不同的出现次数的数目等于不同数字的数目,则返回 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