nums。如果存在一个数 x,使得 nums 中恰好有 x 个元素大于或者等于 x,那么就称 nums 是一个特殊数组,而 x 是该数组的特征值。nums 是一个特殊数组,请返回它的特征值 x,否则返回 -1。
nums 是特殊数组,那么其特征值 x 是唯一的。i 如果是特征值,则满足 nums[i-1] >= i and nums[i] < i。【注意 i 从 1 开始】class Solution
{
public:
int specialArray(vector<int>& nums)
{
sort(nums.begin(), nums.end(), greater<int>());
int m = nums.size();
for(int i = 1; i <= m; ++i)
{
// 满足 nums[i-1] >= i and nums[i] < i
if(nums[i-1] >= i and (i == m or nums[i] < i))
return i;
}
return -1;
}
};
class Solution
{
public:
int specialArray(vector<int>& nums)
{
sort(nums.begin(), nums.end());
int n = nums.size(), left = 1, right = nums.size();
while (left <= right)
{
int mid = left + right >> 1;
if (nums[n - mid] >= mid)
{
if (mid == n || nums[n - mid - 1] < mid)
return mid;
else
left = mid + 1;
}
else
right = mid - 1;
}
return -1;
}
};