Cho mảng nums. Kiểm tra xem các phần tử có tạo thành dãy số liên tiếp hay không (chỉ số dương).
Ví dụ: [6,8,3,5,4,7] → các số 3,4,5,6,7,8 → True.
Giải thuật
- Tìm min, max. Nếu
max - min + 1 == nthì có thể là dãy liên tiếp. - Dùng kỹ thuật đánh dấu âm: với mỗi phần tử, tính chỉ số
j = nums[i] - min(hoặc-nums[i] - minnếu âm). Đánh dấunums[j]âm. Nếu gặp phần tử đã âm → trùng lặp →False.
Mã ví dụ
def solve(nums):
if len(nums) < 1:
return False
min_val = min(nums)
max_val = max(nums)
if max_val - min_val + 1 == len(nums):
for i in range(len(nums)):
if nums[i] < 0:
j = -nums[i] - min_val
else:
j = nums[i] - min_val
if nums[j] > 0:
nums[j] = -nums[j]
else:
return False
return True
return False
nums = [6, 8, 3, 5, 4, 7]
print(solve(nums))
Đầu vào
[6, 8, 3, 5, 4, 7]
Đầu ra
True