给你一个非负整数数组 nums 。如果存在一个数 x ,使得 nums 中恰好有 x 个元素 大于或者等于 x ,那么就称 nums 是一个 特殊数组 ,而 x 是该数组的 特征值 。
注意: x 不必 是 nums 的中的元素。
如果数组 nums 是一个 特殊数组 ,请返回它的特征值 x 。否则,返回 -1 。可以证明的是,如果 nums 是特殊数组,那么其特征值 x 是 唯一的 。
解题思路:根据特征值定义,如果X是特征值,那么有X个元素大于等于X。降序排列后,从nums[0]到nums[X-1]必须大于等于X,并且nums[X](如果存在)必须小于X
class Solution:
def specialArray(self, nums: List[int]) -> int:
nums.sort(reverse=True) #倒序排序数组nums
n = len(nums) #数组长度
for i in range(1, n + 1):
if nums[i - 1] >= i and (i == n or nums[i] < i):
return i
return -1