Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

โปรแกรมค้นหาดัชนีหรือพีคท้องถิ่นใน Python


สมมติว่าเรามีรายการหมายเลขที่เรียกว่า nums เราต้องหาดัชนีขององค์ประกอบพีคทุกตัวใน nums โดยเรียงลำดับจากน้อยไปมาก ดัชนี i ขององค์ประกอบพีคเมื่อตรงตามเงื่อนไขทั้งสามนี้:1. ตัวเลขถัดไปทางด้านขวาซึ่งแตกต่างจาก nums[i] ไม่มีอยู่หรือต้องน้อยกว่า nums[i] 2. ตัวเลขก่อนหน้าบน ทางด้านซ้ายหรือด้านขวาของ nums[i] ไม่มีหรือต้องน้อยกว่า nums[i] 3 มีตัวเลขทางด้านซ้ายหรือด้านขวาอย่างน้อยหนึ่งตัวซึ่งแตกต่างจาก nums[i]

ดังนั้น หากอินพุตเท่ากับ nums =[5, 8, 8, 8, 6, 11, 11] ผลลัพธ์จะเป็น [1, 2, 3, 5, 6] เพราะที่ราบสูงของ 8s ถือเป็น พีค [1,2,3] และ 11s ก็เช่นกัน [5, 6]

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • n :=ขนาดของ nums
  • ans :=รายการใหม่
  • ผม :=0
  • ในขณะที่ฉัน
  • i0 :=ฉัน
  • ในขณะที่ i
  • ผม :=ผม + 1
  • ถ้า (i0 คือ 0 หรือ nums[i0]> nums[i0 - 1]) และ (i คือ n หรือ nums[i0]> nums[i]) แล้ว
    • ถ้า i0 ไม่ใช่ 0 หรือ i ไม่ใช่ n แล้ว
      • แทรก a (รายการจาก i0 ถึง i-1) ต่อท้ายคำตอบ
  • คืนสินค้า
  • ตัวอย่าง

    ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

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

    อินพุต

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

    ผลลัพธ์

    [1, 2, 3, 5, 6]