• LeetCode.1207-唯一的元素出现次数(Unique Number of Occurrences)


    这是小川的第419次更新,第452篇原创


    看题和准备

    今天介绍的是LeetCode算法题中Easy级别的第269题(顺位题号是1207)。给定一个整数数组arr,当且仅当该数组中每个元素的出现次数唯一时,返回true

    例如:

    输入:arr = [1,2,2,1,1,3]
    输出:true
    说明:值1出现3次,值2出现2次,值3出现1次。没有两个值出现的次数相同。

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

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

    限制条件

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

    第一种解法

    题目的意思是判断数组中的元素的出现次数是否唯一,我们可以直接使用HashMapHashSet结合,先遍历arr中的元素,将元素值作为key,出现次数作为value存入HashMap中,再遍历HashMap的所有value,存入HashSet中,如果当前value已经存在,直接返回false

    public boolean uniqueOccurrences(int[] arr) {
        Map<Integer, Integer> map = new HashMap<Integer, Integer>();
        for (int num : arr) {
        	map.put(num, map.getOrDefault(num, 0)+1);
        }
        Set<Integer> set = new HashSet<Integer>();
        for (Integer count : map.values()) {
        	if (set.contains(count)) {
        		return false;
        	}
        	set.add(count);
        }
        return true;
    }
    

    第二种解法

    使用int数组计数。因为题目限定了原始数组的长度和元素值范围,所以我们可以借助计数来解决此问题。

    第一次计数,声明一个长度为2001的int数组count,将原始数组的值加上1000后作为新数组索引。第二次计数,同样声明一个长度为2001的int数组count2,如果count中的当前元素不等于0,就将当前元素作为count2数组的索引,元素值累加,加完后判断元素值是否大于等于2,如果大于,直接返回false

    public boolean uniqueOccurrences2(int[] arr) {
        int[] count = new int[2001];
        for (int num : arr) {
        	count[num+1000]++;
        }
        int[] count2 = new int[2001];
        for (int con : count) {
        	if (con != 0) {
        		count2[con]++;
        		if (count2[con] >= 2) {
        			return false;
        		}
        	}
        }
        return true;
    }
    

    第三种解法

    和上面第二种解法类似,只是将第二步计数的int数组换成了boolean类型,其他思路不变。

    public boolean uniqueOccurrences3(int[] arr) {
        int[] count = new int[2001];
        for (int num : arr) {
        	count[num+1000]++;
        }
        boolean[] flag = new boolean[2001];
        for (int con : count) {
        	if (con > 0) {
        		if (flag[con]) {
        			return false;
        		} else {
        			flag[con] = true;
        		}
        	}
        }
        return true;
    }
    

    小结

    算法专题目前已更新LeetCode算法题文章275+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。

    以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、在看就是对我最大的回报和支持!

  • 相关阅读:
    http返回码
    JAVA获取当前系统时间System.currentTimeMillis()以及获取运行时间
    【Jsoup】Jsoup解析Html标签(Java后台解析)
    字节、字、位、比特,这四者之间的关系
    Java中字符编码和字符串所占字节数 .
    判断一个字符串是否为全英文的工具
    汉语转拼音(全转与只转首个字母)工具类
    Page的生命周期及相关事件苛
    PHP设计模式——策略模式
    java生产者消费者问题代码分析
  • 原文地址:https://www.cnblogs.com/xiaochuan94/p/11633570.html
Copyright © 2020-2023  润新知