返回

算法题每日一练---第54天:那缺失的数字究竟去哪儿了?

前端

导语:

算法题是一道道精巧的谜题,锻炼我们的思维能力,尤其在编程领域,更是不可或缺的修炼方式。今天,我们就来一起破解算法题每日一练---第54天的谜题:寻找丢失的数字。

题意:

给定一个包含 [0, n] 中 n 个数的数组 nums,找出 [0, n] 这个范围内没有出现在数组中的那个数。

示例:

  • 输入:nums = [3,0,1]
    输出:2
  • 输入:nums = [0,1]
    输出:2
  • 输入:nums = [9,6,4,2,3,5,7,0,1]
    输出:8

解题思路:

第一步,我们需要认识到,既然题目已经告诉我们给定的数组中包含 [0, n] 中 n 个数,那么一定有一个数字缺失了。所以,我们可以先找出数组中最大的数字max,然后用max + 1来表示缺失的数字。

第二步,我们需要遍历数组nums,找出数组中已经存在的数字,并将其标记为已存在。我们可以创建一个布尔数组visited来存储这些标记。

第三步,当遍历到一个数字时,如果visited[i]为True,说明该数字已经存在;否则,我们找到了缺失的数字。

代码实现:

def find_missing_number(nums):
    """
    :type nums: List[int]
    :rtype: int
    """
    max_num = max(nums)
    visited = [False] * (max_num + 1)

    for num in nums:
        visited[num] = True

    for i in range(max_num + 1):
        if not visited[i]:
            return i

    return -1


if __name__ == "__main__":
    nums = [3, 0, 1]
    missing_number = find_missing_number(nums)
    print("The missing number is:", missing_number)

    nums = [0, 1]
    missing_number = find_missing_number(nums)
    print("The missing number is:", missing_number)

    nums = [9, 6, 4, 2, 3, 5, 7, 0, 1]
    missing_number = find_missing_number(nums)
    print("The missing number is:", missing_number)

复杂度分析:

  • 时间复杂度:O(n),其中n为数组nums的长度。
  • 空间复杂度:O(n),其中n为数组nums的长度。

结语:

算法题的解题过程就像一场探险,需要我们步步为营,不断探索。只要我们坚持不懈,终能找到解决问题的钥匙。