Skip to content

Instantly share code, notes, and snippets.

@loisgh
Created February 26, 2018 19:58
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save loisgh/ee4653a6a1647d1121ffb7b0860b8f38 to your computer and use it in GitHub Desktop.
Save loisgh/ee4653a6a1647d1121ffb7b0860b8f38 to your computer and use it in GitHub Desktop.
def find_1d_peak(arr, low, high, n):
mid = low + (high - low) / 2
if ((mid == 0 or arr[mid - 1] <= arr[mid]) and
(mid == n - 1 or arr[mid + 1] <= arr[mid])):
return mid
elif (mid > 0 and arr[mid - 1] > arr[mid]):
return find_1d_peak(arr, low, (mid - 1), n)
else:
return find_1d_peak(arr, (mid + 1), high, n)
def find_2d_peak(pm, first, last):
mid = first + (last - first) / 2
col = mid
the_len = len(pm[col])
row = find_1d_peak(pm[col], 0, the_len - 1, the_len)
if pm[row][col] > pm[row+1][col] and pm[row][col] > pm[row-1][col]:
return (row, col)
elif pm[row][col] > pm[row+1][col] and pm[row][col] < pm[row-1][col]:
return find_2d_peak(pm, first, row-1)
else:
return find_2d_peak(pm, row+1, last)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment