【陣列】1608. 特殊陣列的特徵值(簡單)

小學三年級01班發表於2020-10-20

【題目】
給你一個非負整數陣列 nums 。如果存在一個數 x ,使得 nums 中恰好有 x 個元素 大於或者等於 x ,那麼就稱 nums 是一個 特殊陣列 ,而 x 是該陣列的 特徵值 。注意: x 不必 是 nums 的中的元素。如果陣列 nums 是一個 特殊陣列 ,請返回它的特徵值 x 。否則,返回 -1 。可以證明的是,如果 nums 是特殊陣列,那麼其特徵值 x 是 唯一的 。
【示例 1】
輸入:nums = [3,5]
輸出:2
解釋:有 2 個元素(3 和 5)大於或等於 2 。
【示例 2】
輸入:nums = [0,0]
輸出:-1
解釋:沒有滿足題目要求的特殊陣列,故而也不存在特徵值 x 。
如果 x = 0,應該有 0 個元素 >= x,但實際有 2 個。
如果 x = 1,應該有 1 個元素 >= x,但實際有 0 個。
如果 x = 2,應該有 2 個元素 >= x,但實際有 0 個。
x 不能取更大的值,因為 nums 中只有兩個元素。
【示例 3】
輸入:nums = [0,4,3,0,4]
輸出:3
解釋:有 3 個元素大於或等於 3 。
【示例 4】
輸入:nums = [3,6,7,7,0]
輸出:-1
【提示】
1 <= nums.length <= 100
0 <= nums[i] <= 1000
【程式碼】

class Solution {
public:
    int hashnum[1001]={0};
    int specialArray(vector<int>& nums) {
        int len=nums.size(),cnt=0,pre=0;
        for(auto x:nums)
            hashnum[x]++;
        pre=hashnum[1000];
        for(int i=999;i>=0;i--)
            hashnum[i]+=hashnum[i+1];
        for(int i=0;i<=1000;i++){
            if(i==hashnum[i])
                return i;
        }
        return -1;
    }
};

相關文章