Skip to content

Commit db3a945

Browse files
Merge pull request #179 from Upendra48/recursion_questions
Add: recursion problem:: peak in mountain array and pivot in sorted rotated array
2 parents eb6dbcb + 683af07 commit db3a945

2 files changed

Lines changed: 60 additions & 0 deletions

File tree

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
#include <iostream>
2+
#include <vector>
3+
using namespace std;
4+
5+
int findPeak(const vector<int>& arr, int low, int high) {
6+
int mid = low + (high - low) / 2;
7+
8+
// Check if mid is the peak
9+
if ((mid == 0 || arr[mid] > arr[mid - 1]) && (mid == arr.size() - 1 || arr[mid] > arr[mid + 1])) {
10+
return arr[mid];
11+
}
12+
13+
// If mid is in the ascending part, move right
14+
if (mid < arr.size() - 1 && arr[mid] < arr[mid + 1]) {
15+
return findPeak(arr, mid + 1, high);
16+
} else {
17+
// Move left otherwise
18+
return findPeak(arr, low, mid - 1);
19+
}
20+
}
21+
22+
int main() {
23+
vector<int> arr = {1, 3, 8, 12, 4, 2};
24+
cout << "Peak element: " << findPeak(arr, 0, arr.size() - 1) << endl;
25+
return 0;
26+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
#include <iostream>
2+
#include <vector>
3+
using namespace std;
4+
5+
int findPivot(const vector<int>& arr, int low, int high) {
6+
// Base case: if only one element left, it's the pivot
7+
if (low == high) {
8+
return low;
9+
}
10+
11+
int mid = low + (high - low) / 2;
12+
13+
// Check if mid is the pivot
14+
if (mid < high && arr[mid] > arr[mid + 1]) {
15+
return mid + 1;
16+
}
17+
if (mid > low && arr[mid] < arr[mid - 1]) {
18+
return mid;
19+
}
20+
21+
// Decide to search in the left or right half
22+
if (arr[low] >= arr[mid]) {
23+
return findPivot(arr, low, mid - 1);
24+
} else {
25+
return findPivot(arr, mid + 1, high);
26+
}
27+
}
28+
29+
int main() {
30+
vector<int> arr = {4, 5, 6, 7, 0, 1, 2};
31+
int pivotIndex = findPivot(arr, 0, arr.size() - 1);
32+
cout << "Pivot element: " << arr[pivotIndex] << " at index " << pivotIndex << endl;
33+
return 0;
34+
}

0 commit comments

Comments
 (0)