1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| class Solution { public: int search(vector<int>& nums, int target) { int sz = nums.size(); auto bias = binarySearch(nums, 0, sz - 1); int lo = 0, hi = sz; int mid; while(lo < hi) { mid = (lo + hi) / 2; if(nums[(mid + bias) % sz] < target) { lo = mid + 1; }else { hi = mid; } } return (nums[(hi + bias) % sz] == target) ? (hi + bias) % sz : -1;
} private: int binarySearch(vector<int>& nums, size_t lo, size_t hi) { int mid; while (lo < hi) { mid = (lo + hi) / 2; if (nums[mid] > nums[hi]) { lo = mid + 1; } else { hi = mid; } } return hi; } };
|