
【排序+二分】排序之后对每个i通过二分找到多少个比他大的数。
- class Solution {
-
- // 9:51 二分
-
- public int specialArray(int[] nums) {
- Arrays.sort(nums);
- int n = nums.length, left, right;
- for (var i = 1; i <= n; i++) {
- left = 0; right = n - 1;
- while (left <= right) {
- int mid = (left + right) >>> 1;
- if (nums[mid] >= i) right = mid - 1;
- else left = mid + 1;
- }
- if (n - left == i) return i;
- }
- return -1;
- }
- }
- class Solution {
- public:
-
- // 10:05
-
- int specialArray(vector<int>& nums) {
- sort(nums.begin(), nums.end());
- int n = nums.size(), left, right;
- for (auto i = 1; i <= n; i++) {
- left = 0, right = n - 1;
- while (left <= right) {
- int mid = (left + right) >> 1;
- if (nums[mid] >= i) right = mid - 1;
- else left = mid + 1;
- }
- if (n - left == i) return i;
- }
- return -1;
- }
- };