Cho mảng nums. Kiểm tra mảng có xen kẽ: tăng chặt → giảm chặt → tăng chặt... (bắt đầu phải tăng). Nếu chỉ tăng chặt toàn bộ cũng hợp lệ.
Ví dụ: nums=[2,4,8,7,5,1,5,7,2,1] → True (2,4,8 tăng; 7,5,1 giảm; 5,7 tăng; 2,1 giảm).
Giải thuật (Kiểm tra điều kiện cần)
- Nếu
nums[1] <= nums[0]→False(phải bắt đầu bằng tăng) - Kiểm tra không có hai phần tử liền kề bằng nhau
- Điều kiện này cần nhưng chưa đủ (code gốc thiếu kiểm tra xu hướng tăng/giảm xen kẽ)
Lưu ý: Code gốc chỉ kiểm tra không có phần tử bằng nhau liền kề, chưa kiểm tra đầy đủ xen kẽ tăng/giảm. Cần bổ sung logic theo dõi trạng thái tăng/giảm.
Ví dụ triển khai (đã cải tiến)
def solve(nums):
if len(nums) < 2:
return True
if nums[1] <= nums[0]:
return False
increasing = True # Bắt đầu bằng tăng
for i in range(1, len(nums)):
if nums[i] == nums[i-1]:
return False
if increasing:
if nums[i] < nums[i-1]:
increasing = False # Chuyển sang giảm
else:
if nums[i] > nums[i-1]:
increasing = True # Chuyển sang tăng
return True
print(solve([2, 4, 8, 7, 5, 1, 5, 7, 2, 1]))
Đầu vào
[2, 4, 8, 7, 5, 1, 5, 7, 2, 1]
Đầu ra
True