LeetCode: 5531. 特殊数组的特征值
在一个特征数组中,存在一个数 x 使得数组中有 x 个元素大于等于 x
所以 x 的范围就由 x 个元素确定 >> 1 <= x <= arr.length
补: x == 0 >> 非负整数数组中有 0 个元素大于等于 0 >> 无意义
循环 i 从 0 遍历到 arr.length, 互补: x + 下标 i == arr.length
所以当 x <= nums[i] && x > nums[i - 1] 的时候就找到了特征值 x
public int specialArray(int[] nums) { // 排序 >> 从小到大 Arrays.sort(nums); int len = nums.length; // 把 i == 0 提出来 int ret = len; if(ret <= nums[0]) return ret; // nums 中有 x 个元素大于或者等于 x // 循环到 x for (int i = 1; i < len; i++) { ret = len - i; // ret >> 4 3 2 1 >> ret 取不到 0, 因为 0 没有意义 if(ret <= nums[i] && ret > nums[i - 1]){ // 有 ret 个, i 就为分界的下标 return ret; } } return -1; }>> 解题思路