Skip to content
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
更新二分实现(最左最右)
  • Loading branch information
xybh-l authored Jan 11, 2021
commit 8417aee1eded40b65e8bda0e49384201be5ea79d
51 changes: 46 additions & 5 deletions 91/binary-search.md
Original file line number Diff line number Diff line change
Expand Up @@ -272,10 +272,31 @@ function binarySearchLeft(nums, target) {

##### C++

暂时空缺,欢迎 [PR](https://github.com/leetcode-pp/leetcode-cheat/pulls)

```cpp

int binarySearchLeft(vector<int>& nums, int target) {
// 搜索区间为 [left, right]
int left = 0, right = nums.size() - 1;
while (left <= right) {
int mid = left + ((right - left) >> 1);
if (nums[mid] == target) {
// 收缩右边界
right = mid - 1;
}
if (nums[mid] < target) {
// 搜索区间变为 [mid+1, right]
left = mid + 1;
}
if (nums[mid] > target) {
// 搜索区间变为 [left, mid-1]
right = mid - 1;
}
}
// 检查是否越界
if (left >= nums.size() || nums[left] != target)
return -1;
return left;
}
```

### 寻找最右边的满足条件的值
Expand Down Expand Up @@ -380,10 +401,30 @@ function binarySearchRight(nums, target) {

##### C++

暂时空缺,欢迎 [PR](https://github.com/leetcode-pp/leetcode-cheat/pulls)

```cpp

int binarySearchRight(vector<int>& nums, int target) {
// 搜索区间为 [left, right]
int left = 0, right = nums.size() - 1;
while (left <= right) {
int mid = left + ((right - left) >> 1);
if (nums[mid] == target) {
// 收缩左边界
left = mid + 1;
}
if (nums[mid] < target) {
// 搜索区间变为 [mid+1, right]
left = mid + 1;
}
if (nums[mid] > target) {
// 搜索区间变为 [left, mid-1]
right = mid - 1;
}
}
// 检查是否越界
if (right < 0 || nums[right] != target)
return -1;
return right;
}
```

### 寻找最左插入位置
Expand Down