原题说明
Given a sorted array A
of unique numbers, find the K-th
missing number starting from the leftmost number of the array.
Example 1:
Input: A = [4,7,9,10], K = 1
Output: 5
Explanation:
The first missing number is 5.
Example 2:
Input: A = [4,7,9,10], K = 3
Output: 8
Explanation:
The missing numbers are [5,6,8,…], hence the third missing number is 8.
Example 3:
Input: A = [1,2,4], K = 3
Output: 6
Explanation:
The missing numbers are [3,5,6,7,…], hence the third missing number is 6.
Note:
1 <= A.length <= 50000
1 <= A[i] <= 1e7
1 <= K <= 1e8
解题思路
显然暴力破解不是我们想要的方法。既然暴力破解的时间复杂度是O(N),那我们需要比这更优的解,一般只有O(logN)
了。这样我们自然想到用binary search
。
我们可以进行binary search
。具体到这道题,我们按每个index
对应的对应的missing elements
的数量进行二分。如果大于K
,则我们要求的第K
个element
一定在这个index
的左边,小于K
则一定在右边。找到这个转换点的index
,就能通过计算得出想要的第k
个missing element
。
示例代码 (cpp)
1 | class Solution { |
示例代码 (java)
1 | class Solution { |
示例代码 (python)
1 | class Solution: |
复杂度分析
时间复杂度: O(logN)
空间复杂度: O(1)
归纳总结
我们在Youtube上更新了视频讲解,欢迎关注!