返回
算法题每日一练---第54天:那缺失的数字究竟去哪儿了?
前端
2023-10-07 16:41:52
导语:
算法题是一道道精巧的谜题,锻炼我们的思维能力,尤其在编程领域,更是不可或缺的修炼方式。今天,我们就来一起破解算法题每日一练---第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的长度。
结语:
算法题的解题过程就像一场探险,需要我们步步为营,不断探索。只要我们坚持不懈,终能找到解决问题的钥匙。