carloscn / structstudy

Leetcode daily trainning by using C/C++/RUST programming.
4 stars 1 forks source link

leetcode1207:独一无二的出现次数(unique-number-of-occurrences) #193

Open carloscn opened 1 year ago

carloscn commented 1 year ago

问题描述

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

来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/unique-number-of-occurrences

carloscn commented 1 year ago

问题分析

首先对数组进行排序,准备一个count数组,统计次数push进入count数组,如果已经包含了,那么就直接返回false,直到所有元素都判断完,然后返回true。


pub fn unique_occurrences(arr: Vec<i32>) -> bool
{
    if (arr.len() < 1) ||
       (arr.len() == 2 && arr[0] != arr[1]) {
        return false;
    }

    let mut rep_count:Vec<usize> = vec![];
    let mut arr_dup = arr.clone();
    let mut i:usize = 0;
    let mut count:usize = 0;

    arr_dup.sort();

    while i < arr.len() - 1 {
        if arr_dup[i] == arr_dup[i + 1] {
            count += 1;
        } else {
            if rep_count.contains(&count) {
                return false;
            } else {
                rep_count.push(count);
            }
            count = 0;
        }
        i += 1;
    }

    return true;
}
carloscn commented 1 year ago

code

https://review.gerrithub.io/c/carloscn/structstudy/+/552907 https://github.com/carloscn/structstudy/commit/86a8e6e5094f046e49b9aeae76538d3bdb3d4356