题解
由题:x
个元素大于等于x
,可以想到将数组从小到大排序,遍历到下标i
的元素时,加上该元素后面共有n-i
个数字。因此只需要判断下面两个条件:
- 这
n-i
个数字是否大于等于n-i
。 - 前
i
个数字是否小于n-i
如果满足,则说明n-i
是特征值。
由于排序后数组内元素升序排序,因此上面条件转换为:
nums[i] >= n-i
i==0 || nums[i-1] < n-i
i==0
时说明前面没有数字,只需要满足条件1即可
代码如下:
public class Solution {
public int specialArray(int[] nums) {
int n = nums.length;
Arrays.sort(nums);
for (int i = 0; i < n; i++) {
//遍历到第i个数,包含这个数以及之后的数,共有n-i个
if(nums[i] >= n-i){
if(i==0 || nums[i-1] < n-i){
//特征值为n-i
return n-i;
}
}
}
return -1;
}
}