我是靠谱客的博主 清脆鞋垫,最近开发中收集的这篇文章主要介绍LeetCode刷题-1207.独一无二的出现次数LeetCode刷题-1207.独一无二的出现次数,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

LeetCode刷题-1207.独一无二的出现次数

补Leetcode 10月28号的每日一题

一、题目描述:

给你一个整数数组 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

二、Java代码

第一步都是要先计算每个数出现的次数。后面的只需要判断这个出现次数的数组中元素是否有重复的即可。

方法一 :利用数组存储每个数出现的次数

分析:

根据提示-1000 <= arr[i] <= 1000,我们可以用桶的思想,构建2001个桶(长度为2001的数组),然后遍历给出的数组,每出现一个数,就往对应的桶里扔一个旗子,这样就可以统计数组中每个数的出现次数。 然后我们排除没有旗子的桶,将每个桶里的旗子数量Set集合里放,因为Set集合里的元素不能重复,如果有存放失败的就说明前面存过这个元素了,即每个数的出现次数存在相同的,就返回false。

在这里插入图片描述

ps:哈哈哈,画的好丑,手动狗头

注意:数组的下标只能从零开始,而-1000 <= arr[i] <= 1000,所以counts[1000 + arr[i]]++,这里加1000处理。

上代码:

class Solution {
    public boolean uniqueOccurrences(int[] arr) {
        int[] counts = new int[2001];
        for(int i=0;i<arr.length;i++){
            counts[1000 + arr[i]]++;
        }
        Set<Integer> set = new HashSet<>();  
        for(int val : counts){
            if(val != 0){
                if(!set.add(val)){
                    return false;
                }
            }
        }
        return true;
    }
}

提交结果


这。。。内存消耗,12%。。。emmm~。

方法二: 利用HashMap存储每个数出现的次数:

来自题解区:

getOrDefault(Object key, V defaultValue),意思就是当Map集合中有这个key时,就使用这个key对应的value值,如果没有就使用默认值defaultValue

找到每个数出现的次数之后,把出现次数的数组放到集合set中,如果有重复的就会不会存进set,那么set的大小肯定和出现次数的数组长度不一样。否则如果没有重复的,他们的长度肯定是一样的。

class Solution {
    public boolean uniqueOccurrences(int[] arr) {
        //Map<值,出现的次数>
        Map<Integer, Integer> map = new HashMap<>();
        for (int i = 0; i < arr.length; i++) {
            map.put(arr[i], map.getOrDefault(arr[i], 0) + 1);
        }
        return map.size() == new HashSet<>(map.values()).size();
    }
}

提交结果

image-20201030165532380

最后

以上就是清脆鞋垫为你收集整理的LeetCode刷题-1207.独一无二的出现次数LeetCode刷题-1207.独一无二的出现次数的全部内容,希望文章能够帮你解决LeetCode刷题-1207.独一无二的出现次数LeetCode刷题-1207.独一无二的出现次数所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部