返回

python-为什么会有 KeyError

发布时间:2022-06-04 13:39:09 229
# node.js

以下是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。


特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(1)
按点赞数排序
用户头像
下一篇
sql-使用 COUNT(*) OVER (PARTITION BY 2022-06-04 11:40:41