1. 程式人生 > 實用技巧 >Leetcode 1207. 獨一無二的出現次數(C語言)

Leetcode 1207. 獨一無二的出現次數(C語言)

1207. 獨一無二的出現次數

給你一個整數陣列 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

解題思路

  1. 設定一個計數器count統計每個數值出現的次數,把對應數值作為下標註意負值,因此可以加上MAXN
  2. 設定一個計數器的計數器,如果有兩個以上的數出現次數相同,那麼肯定有對應的多個count相等,即存在count_count的值大於等於2。

解題程式碼

#define MAXN 1010
bool uniqueOccurrences(int* arr, int arrSize){
    int count[MAXN*2];
    int count_count[MAXN*2];
    memset(count,0,sizeof(count));
    memset(count_count,0,sizeof(count_count));
    int i = 0;
    for(;i<arrSize;i++)
    {
        count[arr[i]+MAXN]++;
    }
    for(i=0;i<MAXN*2;i++)
    {

        count_count[count[i]]+=count[i]==0?0:1;
    }
    for(i = 0;i<MAXN*2;i++)
    {
        if(count_count[i] >= 2) return false;
    }
    return true;
}