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

ค้นหา Peak Element ใน Python


สมมติว่าเราต้องหาพีคอิลิเมนต์ในอาร์เรย์ องค์ประกอบสูงสุดเป็นองค์ประกอบที่มากกว่าเพื่อนบ้าน สมมติว่าเรามีอินพุตอาร์เรย์ nums โดยที่ nums[i] ≠ nums[i+1] ค้นหาองค์ประกอบพีคและส่งคืนดัชนี อาร์เรย์สามารถเก็บอิลิเมนต์พีคได้หลายรายการ ในกรณีนี้ ให้ส่งคืนดัชนีไปยังอิลิเมนต์พีคตัวใดตัวหนึ่ง เราสามารถจินตนาการได้ว่า nums[-1] =nums[n] =-∞ ดังนั้นหากอาร์เรย์เป็นเหมือน [1,2,1,3,5,6,4] อิลิเมนต์พีคควรเป็น 1 หรือ 5

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

  • ต่ำ :=0 และสูง :=ดัชนีสุดท้ายของอาร์เรย์ n :=ขนาดของอาร์เรย์ ans :=อินฟินิตี้
  • ในขณะที่ต่ำ <=สูง
    • กลาง :=ต่ำ + (สูง - ต่ำ)/2
    • ถ้า mid – 1>=0 และ nums[mid – 1] <=nums[mid] แล้ว low :=mid, มิฉะนั้น high :=mid - 1
  • ผลตอบแทนต่ำ

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

ตัวอย่าง

class Solution(object):
   def findPeakElement(self, nums):
      low = 0
      high = len(nums)-1
      while low<high:
         mid = low + (high - low+1)//2
         if (mid-1>=0 and nums[mid-1]<=nums[mid]):
            low = mid
         else:
            high = mid-1
      return nums[low+1]
ob1 = Solution()
print(ob1.findPeakElement([15,35,85,96,5,6,8,12]))

อินพุต

[15,35,85,96,5,6,8,12]

ผลลัพธ์

5