python-为什么会有 KeyError
以下是LeetCode问题:
给定一个整数数组nums,该数组按升序排序,其所有元素都是唯一的,并给定一个整数k,返回从数组最左边开始的第k个缺失数字。
我写了一个解决方案(不是最好的),并且得到了一个 KeyError。这是在 Leetcode 平台上运行的。这是我的解决方案:
class Solution:
def missingElement(self, nums: List[int], k: int) -> int:
missing_dict = {}
c = 0
min_nums = nums[0]
max_nums = nums[len(nums)-1]
for num in range(min_nums, max_nums):
num += 1
if num not in nums:
c += 1
missing_dict[c] = num
return missing_dict[k]
一些示例:
Input: nums = [4,7,9,10], k = 1
Output: 5
Explanation: The first missing number is 5.
Input: nums = [4,7,9,10], k = 3
Output: 8
Explanation: The missing numbers are [5,6,8,...], hence the third missing number is 8.
我收到以下错误:KeyError: 3。我不明白为什么我会收到这个错误?最后执行的输入是nums = [1,2,4]和k=3,预期值是6。
添加。因为我们知道数组是按升序排序的,所以我正在遍历数组,将每个元素加 1 并检查它是否在数组中。如果不是,那么我将第一个缺失元素设置为该值 ( missing_dict[1] = value)。如果下一个元素 akavalue+1在数组中,那么仍然k是 1。否则我们递增k等。1missing_dict[2] = value+1
补充说,我刚刚意识到第 k 个缺失的数字不必在 [min_nums, max_nums] 中。这之前不清楚。
添加
1 <= nums.length <= 5 * 10^4
1 <= nums[i] <= 10^7
nums is sorted in ascending order, and all the elements are unique.
1 <= k <= 10^8
部分解决方案
这是使用二进制搜索的部分解决方案:
class Solution:
def missingElement(self, nums: List[int], k: int) -> int:
def count_missing(x: int) -> int:
return x-min(nums)-1
def binary_search_recursive(nums, k, start, end):
if start > end:
return -1
mid = (start + end) // 2
if(count_missing(nums[mid]) > 0):
if count_missing(nums[mid]) >= k:
return nums[start]+k
else:
return nums[mid]+(k-count_missing(nums[mid]))
if count_missing(nums[mid]) >= k:
return binary_search_recursive(nums, k, start, mid-1)
else:
return binary_search_recursive(nums, k, mid+1, end)
return binary_search_recursive(nums, k, 0, len(nums)-1)
它失败了nums = [2,3,5,7],k =1输出 6应该在哪里4。