独一无二的出现次数

163 阅读2分钟

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

一、题目描述

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

二、思路分析:

  • 要判断每个数字的出现次数是否有相同的,首先要统计所有数字出现的次数
  • 第一步先利用Set去重,拿到去重后的数组去遍历原始数组,统计每个数字出现的次数
    • 统计次数的时候可以每个数字声明一个变量去保存数字
    • 这里声明的是数组,用数组的长度来映射每个数字的出现次数
  • 遍历统计后的二维数组,每个子数组的长度就是每个数字的出现次数
    • 判断子数组的长度是否相等,如果有相等的情况,就说明没有独一无二出现的次数,返回false,否则返回true

三、AC 代码:

function uniqueOccurrences(arr: number[]): boolean {
    let repeatArr = [...new Set(arr)];
    let result = [];
    for(let i = 0; i < repeatArr.length; i++){
        let num = [];
        for(let j = 0; j < arr.length; j++){
            if(repeatArr[i] === arr[j]){
                num.push(arr[j]);
            }
        }
        result.push(num)
    }
    for(let i = 0; i < result.length; i++){
        for(let j = i + 1; j < result.length; j++){
            if(result[i].length === result[j].length){
                return false
            }
        }
    }
    return true
};

四、总结:

  • 题目还是比较简单的,注意下先去重就好了
  • 更多解题方式,移步题解区

image.png