Given an array arr
of positive integers sorted in a strictly increasing order, and an integer k
.
Find the kth
positive integer that is missing from this array.
Example 1:
Input: arr = [2,3,4,7,11], k = 5
Output: 9
Explanation: The missing positive integers are [1,5,6,8,9,10,12,13,...]. The 5th missing positive integer is 9.
Example 2:
Input: arr = [1,2,3,4], k = 2
Output: 6
Explanation: The missing positive integers are [5,6,7,...]. The 2nd missing positive integer is 6.
Constraints:
1 <= arr.length <= 1000
1 <= arr[i] <= 1000
1 <= k <= 1000
arr[i] < arr[j]
for1 <= i < j <= arr.length
思路:这题注意是从1开始算的missing number,所以missing = arr[mid] - (mid + 1);
class Solution {
public int findKthPositive(int[] arr, int k) {
// 在前面;
if(arr[0] - 1 >= k) {
return k;
}
//在arr的后面;
int n = arr.length;
int totalmissing = arr[n - 1] - (n - 1) - 1;
if(totalmissing < k) {
return arr[n - 1] + (k - totalmissing);
}
// 在arr中间;
int start = 0; int end = arr.length - 1;
while(start + 1 < end) {
int mid = start + (end - start) / 2;
int missing = arr[mid] - mid - 1;
if(missing < k) {
start = mid;
} else {
// missing >= k;
end = mid;
}
}
int startmissing = arr[start] - start - 1;
return arr[start] + (k - startmissing);
}
}