Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Chương trình tìm chỉ số đỉnh cục bộ (local peak) trong danh sách số Python

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))

  1. Khởi tạo danh sách kết quả ans = []
  2. Duyệt từng (i, num):
    • Nếu 0 < i < n-1 và nums[i-1] < num > nums[i+1]: thêm i
    • Nếu i == 0 và nums[1]: thêm i
    • Nếu i == n-1 và num > nums[n-2]: thêm i
  3. 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]