the first one in Weekly Contest 209.
Difficulty : Easy
Related Topics : Array
You are given an array
nums
of non-negative integers.nums
is considered special if there exists a numberx
such that there are exactlyx
numbers innums
that are greater than or equal tox
.Notice that
x
does not have to be an element innums
.Return
x
if the array is special, otherwise, return-1
. It can be proven that ifnums
is special, the value forx
is unique.Input: nums = [3,5] Output: 2 Explanation: There are 2 values (3 and 5) that are greater than or equal to 2.
Input: nums = [0,0] Output: -1 Explanation: No numbers fit the criteria for x. If x = 0, there should be 0 numbers >= x, but there are 2. If x = 1, there should be 1 number >= x, but there are 0. If x = 2, there should be 2 numbers >= x, but there are 0. x cannot be greater since there are only 2 numbers in nums.
Input: nums = [0,4,3,0,4] Output: 3 Explanation: There are 3 values that are greater than or equal to 3.
Input: nums = [3,6,7,7,0] Output: -1
1 <= nums.length <=100
0 <= nums[i] <= 1000
- mine
- Java
Runtime: 2 ms, faster than 44.13%, Memory Usage: 36.3 MB, less than 39.89% of Java online submissions
// O(N * Max(nums))time // O(1)space public int specialArray(int[] nums) { Arrays.sort(nums); int max = nums[nums.length - 1]; int res = -1; for(int i = 0; i <= max; i++){ int t = 0; for(int j = 0; j < nums.length; j++){ if(nums[j] >= i){ t++; } if(t > i) break; } if(t == i) return i; } return res; }
- Java
- the most votes
Runtime: 1 ms, faster than 86.04%, Memory Usage: 36.6 MB, less than 39.89% of Java online submissions
//O(N*logN)time //O(1)space public int specialArray(int[] nums) { Arrays.sort(nums); for (int i = 0; i < nums.length; i++) { int n = nums.length - i; boolean cond1 = n <= nums[i]; boolean cond2 = (i - 1 < 0) || (n > nums[i - 1]); if (cond1 && cond2) return n; } return -1; }