Cho danh sách nums kích thước n chứa số trong [1, n] (có thể trùng). Tìm tất cả số trong [1, n] không xuất hiện trong danh sách, trả về tăng dần. Yêu cầu thời gian tuyến tính, không gian hằng số.
Ví dụ
Đầu vào: [4, 4, 2, 2, 6, 6].
Đầu ra: [1, 3, 5].
Thuật toán
- Tạo mảng
arrkích thướclen(nums)+1khởi tạo 0. - Duyệt
nums, tăngarr[i]. - Duyệt
arr, nếuarr[i]==0vài!=0thì thêmivào kết quả.
Mã nguồn Python
class Solution:
def solve(self, nums):
arr = [0] * (len(nums) + 1)
for i in nums:
arr[i] += 1
missing = []
for i in range(len(arr)):
if arr[i] == 0 and i != 0:
missing.append(i)
return missing
ob = Solution()
print(ob.solve([4, 4, 2, 2, 6, 6]))
Đầu vào / Đầu ra
Input: [4, 4, 2, 2, 6, 6]
Output: [1, 3, 5]