From 9aad3b1f6396acc81f51bf97cb9ceb92b321c4d2 Mon Sep 17 00:00:00 2001 From: Yash Chaudhary Date: Sun, 4 Oct 2020 23:08:42 +0530 Subject: [PATCH] Create Find Peak Element.py --- python/Find Peak Element.py | 42 +++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 python/Find Peak Element.py diff --git a/python/Find Peak Element.py b/python/Find Peak Element.py new file mode 100644 index 0000000..c913c89 --- /dev/null +++ b/python/Find Peak Element.py @@ -0,0 +1,42 @@ +# A binary search based function +# that returns index of a peak element +def findPeakUtil(arr, low, high, n): + + # Find index of middle element + # (low + high)/2 + mid = low + (high - low)/2 + mid = int(mid) + + # Compare middle element with its + # neighbours (if neighbours exist) + if ((mid == 0 or arr[mid - 1] <= arr[mid]) and + (mid == n - 1 or arr[mid + 1] <= arr[mid])): + return mid + + + # If middle element is not peak and + # its left neighbour is greater + # than it, then left half must + # have a peak element + elif (mid > 0 and arr[mid - 1] > arr[mid]): + return findPeakUtil(arr, low, (mid - 1), n) + + # If middle element is not peak and + # its right neighbour is greater + # than it, then right half must + # have a peak element + else: + return findPeakUtil(arr, (mid + 1), high, n) + + +# A wrapper over recursive +# function findPeakUtil() +def findPeak(arr, n): + + return findPeakUtil(arr, 0, n - 1, n) + + +# Driver code +arr = [1, 3, 20, 4, 1, 0] +n = len(arr) +print("Index of a peak point is", findPeak(arr, n))