Giả sử chúng ta có một mảng nums và hai số x, y xác định khoảng [x, y]. Cần kiểm tra xem mảng có chứa tất cả các phần tử trong khoảng đó hay không.
Ví dụ, nếu đầu vào là nums = [5,8,9,6,3,2,4], x = 2, y = 6, thì đầu ra sẽ là True vì có đủ các phần tử [2,3,4,5,6].
Các bước giải quyết:
- temp_range := y - x.
- Duyệt i từ 0 đến kích thước nums:
- Nếu |nums[i]| >= x và |nums[i]| <= y:
- z := |nums[i]| - x.
- Nếu nums[z] > 0, gán nums[z] := -nums[z] (đánh dấu đã thấy).
- Nếu |nums[i]| >= x và |nums[i]| <= y:
- cnt := 0.
- Duyệt i từ 0 đến temp_range:
- Nếu i >= kích thước nums, thoát vòng lặp.
- Nếu nums[i] > 0, trả về False (thiếu phần tử).
- Ngược lại, cnt := cnt + 1.
- Nếu cnt != temp_range + 1, trả về False.
- Trả về True.
Xem ví dụ dưới đây để hiểu rõ hơn:
Ví dụ
def solve(nums, x, y):
temp_range = y - x
for i in range(len(nums)):
if abs(nums[i]) >= x and abs(nums[i]) <= y:
z = abs(nums[i]) - x
if nums[z] > 0:
nums[z] = -nums[z]
cnt = 0
for i in range(temp_range + 1):
if i >= len(nums):
break
if nums[i] > 0:
return False
else:
cnt += 1
if cnt != temp_range + 1:
return False
return True
nums = [5,8,9,6,3,2,4]
x = 2
y = 6
print(solve(nums, x, y))
Đầu vào
[5,8,9,6,3,2,4], 2, 6
Đầu ra
True