diff --git a/binarySearchOnRotatedSortedArr.cpp b/binarySearchOnRotatedSortedArr.cpp new file mode 100644 index 0000000..c8cc82a --- /dev/null +++ b/binarySearchOnRotatedSortedArr.cpp @@ -0,0 +1,44 @@ +//This is the algorithm for binary search if your arr is initially sorted and then rotated by some places +//Example search 0 in [4,5,6,7,0,1,2] + +#include + +using namespace std; + +class Solution +{ +public: + int search(vector &nums, int target) + { + return find(nums, target, 0, nums.size() - 1); + } + int find(vector &nums, int target, int start, int end) + { + if (start > end) + return -1; + int mid = (start + end) / 2; + if (nums[mid] == target) + return mid; + if (nums[mid] < nums[end]) + { + if (target > nums[mid] and target <= nums[end]) + return find(nums, target, mid + 1, end); + return find(nums, target, start, mid - 1); + } + else + { + if (target >= nums[start] and target < nums[mid]) + return find(nums, target, start, mid - 1); + return find(nums, target, mid + 1, end); + } + } +}; + +int main() +{ + vector nums = {4, 5, 6, 7, 0, 1, 2}; + int target = 0; + Solution s; + cout << s.search(nums, target); + return 0; +} \ No newline at end of file