Computer >> Máy Tính >  >> Lập trình >> Python

Chương trình tìm chỉ số hoặc đỉnh cục bộ trong Python

Giả sử chúng ta có một danh sách các số được gọi là nums. Chúng ta phải tìm chỉ số của mọi phần tử đỉnh trong các số, được sắp xếp theo thứ tự tăng dần. Chỉ số i của phần tử đỉnh khi thỏa mãn tất cả ba điều kiện sau:1. Số tiếp theo ở bên phải khác với nums [i] không có mặt hoặc phải nhỏ hơn nums [i] 2. Số trước đó trên bên trái của nó khác với nums [i] không có hoặc phải nhỏ hơn nums [i] 3. Có ít nhất một số ở bên trái hoặc bên phải của nó khác với nums [i].

Vì vậy, nếu đầu vào giống như nums =[5, 8, 8, 8, 6, 11, 11], thì đầu ra sẽ là [1, 2, 3, 5, 6], vì bình nguyên của 8s được coi là các đỉnh [1,2,3]. Và 11 cũng là, [5, 6].

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • n:=kích thước của nums
  • ans:=một danh sách mới
  • i:=0
  • while i
  • i0:=i
  • trong khi i
  • i:=i + 1
  • if (i0 là 0 hoặc nums [i0]> nums [i0 - 1]) và (i là n hoặc nums [i0]> nums [i]), thì
    • nếu i0 không phải 0 hoặc i không phải n, thì
      • chèn một (danh sách từ i0 đến i-1) vào cuối ans
  • trả lại ans
  • Ví dụ

    Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

    def solve(nums):
       n = len(nums)
       ans = []
       i = 0
       while i < n:
          i0 = i
          while i < n and nums[i] == nums[i0]:
             i += 1
          if (i0 == 0 or nums[i0] > nums[i0 - 1]) and (i == n or nums[i0] > nums[i]):
             if i0 != 0 or i != n:
                ans.extend(range(i0, i))
       return ans
    
    nums = [5, 8, 8, 8, 6, 11, 11]
    print(solve(nums))

    Đầu vào

    [5, 8, 8, 8, 6, 11, 11]

    Đầu ra

    [1, 2, 3, 5, 6]