Advertisement
nikunjsoni

33

May 14th, 2021
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.88 KB | None | 0 0
  1. class Solution {
  2. public:
  3.     int search(vector<int>& nums, int target) {
  4.         int k = findK(nums);
  5.         if(k == nums.size()) k = 0;
  6.        
  7.         // Search left sorted side.
  8.         int idx = lower_bound(nums.begin(), nums.begin()+k, target)-nums.begin();
  9.         if(idx < nums.size() && nums[idx] == target)
  10.             return idx;
  11.        
  12.         // Search right sorted side.
  13.         idx = lower_bound(nums.begin()+k, nums.end(), target) - nums.begin();
  14.         if(idx < nums.size() && nums[idx] == target)
  15.             return idx;
  16.        
  17.         // Number not found.
  18.         return -1;
  19.     }
  20.    
  21.     int findK(vector<int> &nums){
  22.         int l=0, r=nums.size();
  23.         while(l<r){
  24.             int mid = (l+r)/2;
  25.             if(nums[mid] < nums[0])
  26.                 r = mid;
  27.             else
  28.                 l = mid+1;
  29.         }
  30.         return l;
  31.     }
  32.    
  33. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement