26 Unique Number of Occurrences

关注 每天一道编程题 专栏,一起学习进步。

题目

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

Constraints:

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

分析

题意:不同的数字拥有不同的个数,则为真,反之为假;
意思就是对数组中的数字进行计数,要保证每个数的个数都是不一样的。

算法:
拿到arr当前数i
将i放入一个Map中,key为arr[i],value为i出现的次数
由于Map的key具有唯一性,因此最终map的size就是对i去重之后的个数,如[1,1,2,3]最终映射到Map中只有[1,2,3]
然后将Map的value转为set,set也会去重。
如果set.size==Map.size,则为true

举例:
arr=[1,1,2,3,3,3]
Map={1:2,2:1,3:3}.size=3
Set={2,1,3}.size=3
为true

arr=[1,1,2,2]
Map={1:2,2:2}.size=2
Set={2}.size=1
为false

解答

class Solution {
      public boolean uniqueOccurrences(int[] arr) {
      Map<Integer, Integer> count = new HashMap<>();
      for (int a : arr)
          //注意,getOrDefault也会扫描当前正准备***去的key,
          // 因此当当前getOrDefault(key,)的key等于put(key,)的key时,1+getOrDefault(kye,0)起到了对key计数的功能
          count.put(a, 1 + count.getOrDefault(a, 0));
      //由于map的key具有唯一性,因此count.size()为对key去重之后的size
      //set.size()是对value去重之后的size
      return count.size() == new HashSet<>(count.values()).size();
  }
}

解法的亮点在于:

map.put(key,1+map.getOrDefault(key,0))

实现了对值的去重且记录值的实际个数

全部评论

相关推荐

05-12 17:00
门头沟学院 Java
king122:你的项目描述至少要分点呀,要实习的话,你的描述可以使用什么技术,实现了什么难点,达成了哪些数字指标,这个数字指标尽量是真实的,这样面试应该会多很多,就这样自己包装一下,包装不好可以找我,我有几个大厂最近做过的实习项目也可以包装一下
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
06-19 17:02
鼠鼠深知pdd的强度很大,但是现在没有大厂offer,只有一些不知名小厂我是拒绝等秋招呢,还是接下?求大家帮忙判断一下!
水中水之下水道的鼠鼠:接了再说,不图转正的话混个实习经历也不错
投递拼多多集团-PDD等公司10个岗位 >
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务