Leetcode 1185 Solution
This article provides solution to leetcode question 1185 (find-in-mountain-array)
Access this page by simply typing in "lcs 1185" in your browser address bar if you have bunnylol configured.
Leetcode Question Link
https://leetcode.com/problems/find-in-mountain-array
Solution
/**
* // This is the MountainArray's API interface.
* // You should not implement it, or speculate about its implementation
* class MountainArray {
* public:
* int get(int index);
* int length();
* };
*/
class Solution {
public:
int findInMountainArray(int target, MountainArray &arr) {
int l = 0;
int r = arr.length() - 1;
int m;
while (l <= r)
{
m = (l + r) / 2;
int prev = arr.get(m - 1);
int curr = arr.get(m);
int next = arr.get(m + 1);
if (prev < curr && curr > next)
break;
else if (prev < curr && curr < next)
l = m;
else if (prev > curr && curr > next)
r = m;
}
int peak = m;
l = 0;
r = peak;
if (arr.get(peak) < target)
return -1;
while (l <= r)
{
m = (l + r) / 2;
if (arr.get(m) == target)
return m;
else if (arr.get(m) < target)
l = m + 1;
else if (arr.get(m) > target)
r = m - 1;
}
l = peak;
r = arr.length() - 1;
while (l <= r)
{
m = (l + r) / 2;
if (arr.get(m) == target)
return m;
else if (arr.get(m) > target)
l = m + 1;
else if (arr.get(m) < target)
r = m - 1;
}
return -1;
}
};