题目
给你一个整数数组
arr
,请你帮忙统计数组中每个数的出现次数。如果每个数的出现次数都是独一无二的,就返回true
;否则返回false
。
输入:arr = [1,2,2,1,1,3] 输出:true 解释:在该数组中,1 出现了 3 次,2 出现了 2 次,3 只出现了 1 次。没有两个数的出现次数相同。
题解
先声明一个
flag
变量代表了最后返回出去的结果,默认是false
,根据题意要求我们需要确认当前数组中每个数值出现的次数都是独一无二的,所以先对数据出现次数进行统计,声明一个map
变量,它是一个Map
数据结构,我们将arr
变量出来里面的数值出现的次数全部放在map
变量中去统计,然后使用循环出参arr
变量,在循环中使用Map
数据结构的has
方法进行判断当前的循环中的值是否在map
变量中,如果在则通过Map
数据结构的get
方法获取到当前值进行+1
,然后在使用Map
数据结构的set
方法对修改后的值进行更新,如果没有循环的值不存在map
变量中,则把当前的值作为key
,value
设置为1
,因为时第一次出现的,value
是出现的次数,我们声明一个set
变量,它是一个Set
数据结构,利用它有去重的特性,我们去循环map
变量,将map变量中的value
值通过Set
数据结构的add
方法添加到set
变量中,然后判断当前set
变量的长度和map
变量的长度是否相等,如过相等则将flag
变量改为true
,如果不相等则不对flag
变量做任何操作,最后将flag
返回出去即可
/** * @param {number[]} arr * @return {boolean} */ var uniqueOccurrences = function(arr) { let flag = false; const map = new Map(); for (const item of arr) { if (map.has(item)) { let total = map.get(item) + 1; map.set(item, total); } else { map.set(item, 1); } } const set = new Set(); for (let [key, value] of map) { set.add(value) } if (set.size == map.size) { flag = true; } return flag; };
坚持努力,无惧未来!