classSolution { public: boolsearch(vector<int>& nums, int target){ int n = nums.size(); int l = 0, r = n - 1; while (l <= r) { int m = l + (r - l) / 2; if (nums[m] == target) returntrue; if (nums[l] < nums[m]) { if (nums[l] <= target && target < nums[m]) { r = m - 1; } else { l = m + 1; } } elseif (nums[l] > nums[m]) { if (nums[m] < target && target <= nums[r]) { l = m + 1; } else { r = m - 1; } } else { ++l; // 因为nums[m]不是target而nums[m] == nums[l],所以++l来缩小搜索范围 } } returnfalse; } };
classSolution { public: boolsearch(vector<int>& nums, int target){ int n = nums.size(); int l = 0, r = n - 1; while (l <= r) { int m = l + (r - l) / 2; if (nums[m] == target) returntrue; if (nums[m] > nums[r]) { if (nums[l] <= target && target < nums[m]) { r = m - 1; } else { l = m + 1; } } elseif (nums[m] < nums[r]) { if (nums[m] < target && target <= nums[r]) { l = m + 1; } else { r = m - 1; } } else { --r; } } returnfalse; } };