Cho danh sách nums độ dài ≥ 2. Tìm tất cả chỉ số i là "đỉnh cục bộ" (peak):
i = 0:nums[0] > nums[1]i = n-1:nums[n-1] > nums[n-2]- Khác:
nums[i-1] < nums[i] > nums[i+1]
Ví dụ: nums = [5, 6, 7, 6, 9] → kết quả [2, 4] (đỉnh tại 7 và 9).
Thuật toán giải quyết (O(n))
- Khởi tạo danh sách kết quả
ans = [] - Duyệt từng
(i, num):- Nếu
0 < i < n-1vànums[i-1] < num > nums[i+1]: thêmi - Nếu
i == 0vànums[1]: thêmi - Nếu
i == n-1vànum > nums[n-2]: thêmi
- Nếu
- Trả về
ans
Ví dụ minh họa
def solve(nums):
ans = []
n = len(nums)
if n == 1:
return ans
for i, num in enumerate(nums):
if i > 0 and i < n - 1:
if nums[i-1] < num > nums[i+1]:
ans.append(i)
if i == 0:
if num > nums[i+1]:
ans.append(i)
if i == n - 1:
if num > nums[i-1]:
ans.append(i)
return ans
nums = [5, 6, 7, 6, 9]
print(solve(nums))
Đầu vào
[5, 6, 7, 6, 9]
Đầu ra
[2, 4]