leetcodeSolution to some Leetcode problems written in C++ |
git clone git://git.dimitrijedobrota.com/leetcode.git |
Log | Files | Refs | README | LICENSE |
1095.cpp (1491B)
0 class Solution {
1 int find_peak(MountainArray &mountainArr) {
2 int left = 1, right = mountainArr.length() - 2;
3 while (left != right) {
4 const int mid = left + (right - left) / 2;
5 if (mountainArr.get(mid) < mountainArr.get(mid + 1))
6 left = mid + 1;
7 else
8 right = mid;
9 }
10 return left;
11 }
13 int find_left(MountainArray &mountainArr, int left, int right, int target) {
14 while (left != right) {
15 const int mid = left + (right - left) / 2;
16 if (mountainArr.get(mid) < target)
17 left = mid + 1;
18 else
19 right = mid;
20 }
21 return left;
22 }
24 int find_right(MountainArray &mountainArr, int left, int right, int target) {
25 while (left != right) {
26 const int mid = left + (right - left) / 2;
27 if (mountainArr.get(mid) > target)
28 left = mid + 1;
29 else
30 right = mid;
31 }
32 return left;
33 }
35 public:
36 int findInMountainArray(int target, MountainArray &mountainArr) {
37 const int peak = find_peak(mountainArr);
39 const int left = find_left(mountainArr, 0, peak, target);
40 if (mountainArr.get(left) == target) return left;
42 const int right = find_right(mountainArr, peak + 1, mountainArr.length() - 1, target);
43 if (mountainArr.get(right) == target) return right;
45 return -1;
46 }
47 };