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 <= 500001 <= A[i] <= 1e71 <= K <= 1e8
-----------------------------------------
二分的题目反应还是有些慢,需要快速明确几点:
1. 从位置x到某个目标函数f(x)的单调性
2. 这个x在单调性曲线上的位置
3. f(x)和最终答案的关系
不清楚的地方找几个例子快速搞清楚,拿这题来说,关于上面三个问题:
1. f(x)用来表示位置x用掉了几个miss的机会,那么f(x)=nums[x]-nums[0]-x
2. 拿几个例子可以知道,f(x)刚好是最后一个小于k的位置,也就是第一个>=的位置-1,按照二分的套路写法,就是l-1
3. 最终的结果就是nums[x]+k-f(x)=k+nums[0]+x,其中x是l-1
搞清楚了这些,代码就很容易了:
class Solution:
def missingElement(self, nums, k):
l,r = 0,len(nums)-1
while (l <= r):
mid = l + ((r-l)>>1)
target = nums[mid]-nums[0]-mid #target表示用掉了几个miss的机会
if (target >= k):
r = mid-1
else:
l = mid+1
return k+nums[0]+l-1

本文探讨了一种高效算法,用于在已排序的唯一数数组中找到从最左端开始的第K个缺失数字。通过深入分析二分查找技巧,明确了目标函数的单调性及与最终答案的关系,提供了一个清晰的解决方案。
1529

被折叠的 条评论
为什么被折叠?



