From 336a5edc195ddcb2c0fccbdcd6fcd48fa15c1a43 Mon Sep 17 00:00:00 2001 From: vagi2706 <115474543+vagi2706@users.noreply.github.com> Date: Mon, 10 Oct 2022 21:22:10 +0530 Subject: [PATCH] Create Search in Rotated Sorted Array.cpp There is an integer array nums sorted in ascending order (with distinct values). Prior to being passed to your function, nums is possibly rotated at an unknown pivot index k (1 <= k < nums.length) such that the resulting array is [nums[k], nums[k+1], ..., nums[n-1], nums[0], nums[1], ..., nums[k-1]] (0-indexed). For example, [0,1,2,4,5,6,7] might be rotated at pivot index 3 and become [4,5,6,7,0,1,2]. Given the array nums after the possible rotation and an integer target, return the index of target if it is in nums, or -1 if it is not in nums. You must write an algorithm with O(log n) runtime complexity. Example: Input: nums = [4,5,6,7,0,1,2], target = 0 Output: 4 Constraints: 1 <= nums.length <= 5000 -10^4 <= nums[i] <= 10^4 All values of nums are unique. nums is an ascending array that is possibly rotated. -10^4 <= target <= 10^4 --- Search in Rotated Sorted Array.cpp | 45 ++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 Search in Rotated Sorted Array.cpp diff --git a/Search in Rotated Sorted Array.cpp b/Search in Rotated Sorted Array.cpp new file mode 100644 index 0000000..fd63b65 --- /dev/null +++ b/Search in Rotated Sorted Array.cpp @@ -0,0 +1,45 @@ +class Solution { +public: + int prevElement(vector& nums){ + int n=nums.size(); + int start=0; + int end=n-1; + if(nums[0]=nums[mid]) + end=mid-1; + } + return -1; + } + int bSearch(vector& nums, int start, int end, int target){ + while(start<=end){ + int mid=start+(end-start)/2; + if(target == nums[mid]) + return mid; + else if(target < nums[mid]) + end=mid-1; + else + start=mid+1; + } + return -1; + } + int search(vector& nums, int target) { + int index = prevElement(nums); + int first = bSearch(nums, 0, index-1, target); + int second =bSearch(nums, index, nums.size()-1, target); + if(first>=0 && second==-1) + return first; + else if(first == -1 && second>=0) + return second; + else + return -1; + } +};