diff --git a/Search in Rotated Sorted Array b/Search in Rotated Sorted Array new file mode 100644 index 0000000..14358d3 --- /dev/null +++ b/Search in Rotated Sorted Array @@ -0,0 +1,32 @@ +int search(vector& nums, int target) { + if (nums.size() == 0) return -1; + + int left = 0, right = nums.size()-1; + int start = 0; + //1. find index of the smallest element + while(left < right) { + int mid = left + (right-left)/2; + if (nums[mid] > nums[right]) { + left = mid +1; + } else right = mid; + } + + //2. figure out in which side our target lies + start = left; + left = 0; + right = nums.size()-1; + if (target >= nums[start] && target <= nums[right]) + left = start; + else right = start; + + //3. Run normal binary search in sorted half. + while(left <= right) { + int mid = left + (right - left)/2; + if (nums[mid] == target) return mid; + + if (nums[mid] > target) right = mid-1; + else left = mid + 1; + } + + return -1; + }