bisection O(logn) time O(1) space
在数组中找missing number的『下界』,找下界的好处是最后确定缺哪个数直接计算即可,比找上界省事
1 | class Solution { |
二分遍历整个数组,找出missing element在数组中的上界
对于一个数nums[m],如果nums[m] - nums[0] - m >= k,则所求的missing element小于nums[m],nums[m]是一个备选上界,否则肯定大于nums[m]并且nums[m]一定不是一个上界
找到上界nums[l]以后,分情况讨论
- 如果nums[l]是一个真上界,则missing element在(nums[l - 1], nums[l])之间,即k - (nums[l - 1] - nums[0] - (l - 1)) = k + nums[0] + l - 1,即从nums[0]开始跳过数组内的l - 1个数后找出第k个缺失的数
- 如果nums[l]是一个假上界,即数组里所有数都要比所求的missing element小,则应为k - (nums[l] - nums[0] - l) = k + nums[0] + l,即从nums[0]开始跳过数组内的l个数后找出第k个缺失的数
综合起来为k + nums[0] + l - isValid(nums, l, k)
1 | class Solution { |