Advertisement
imashutosh51

Search in a Rotated Array

Jul 31st, 2022 (edited)
43
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.55 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. // } Driver Code Ends
  5.  
  6. //Logic:Time complexity O(log(n))
  7. /*
  8. even if your mid at anywhere in array then,there is one thing for sure,either left half will be sorted or right half will be sorted.
  9. if left half is sorted,then check key element in that range by comparing left half corner elements with key element
  10. ,if key is in range,again call for sorted range ie. low,mid-1
  11. if left half is sorted,and key element is not in sorted range,call search for mid+1,high ie. right half
  12.  
  13. if right half is sorted,then check key element is that right half sorted range,if key in range call for mid+1,high
  14. else call search for other half
  15. */
  16. class Solution{
  17.     public:
  18.     int search(int arr[], int l, int h, int key){
  19.         if(l<=h){
  20.             int mid=(l+h)/2;
  21.             if(arr[mid]==key) return mid;
  22.             if(arr[l]<=arr[mid]){   //left half is sorted
  23.                 if(key>=arr[l] && key<arr[mid]){  //element present in sorted range
  24.                     return search(arr,l,mid-1,key);
  25.                 }
  26.                 else{                               //element not present in sorted range
  27.                     return search(arr,mid+1,h,key);
  28.                 }
  29.             }
  30.             else{                        //right half is sorted
  31.                 if(key>arr[mid] && key<=arr[h]) return search(arr,mid+1,h,key);  //element present in sorted range
  32.                 else return search(arr,l,mid-1,key);  //element not present in sorted range
  33.             }
  34.         }
  35.         return -1;
  36.     }
  37. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement