@@ -157,10 +157,24 @@ function binarySearch(nums, target) {
157157
158158##### C++
159159
160- 暂时空缺,欢迎 [ PR] ( https://github.com/leetcode-pp/leetcode-cheat/pulls )
161-
162160``` cpp
161+ int binarySearch (vector<int >& nums, int target){
162+ if(nums.size() == 0)
163+ return -1;
163164
165+ int left = 0, right = nums.size() - 1;
166+ while(left <= right){
167+ int mid = left + ((right - left) >> 1);
168+ if(nums[ mid] == target){ return mid; }
169+ // 搜索区间变为 [ mid+1, right]
170+ else if(nums[ mid] < target)
171+ left = mid + 1;
172+ // 搜索区间变为 [ left, mid - 1]
173+ else
174+ right = mid - 1;
175+ }
176+ return -1;
177+ }
164178```
165179
166180### 寻找最左边的满足条件的值
@@ -258,10 +272,31 @@ function binarySearchLeft(nums, target) {
258272
259273##### C++
260274
261- 暂时空缺,欢迎 [ PR] ( https://github.com/leetcode-pp/leetcode-cheat/pulls )
262275
263276``` cpp
264-
277+ int binarySearchLeft (vector<int >& nums, int target) {
278+ // 搜索区间为 [ left, right]
279+ int left = 0, right = nums.size() - 1;
280+ while (left <= right) {
281+ int mid = left + ((right - left) >> 1);
282+ if (nums[ mid] == target) {
283+ // 收缩右边界
284+ right = mid - 1;
285+ }
286+ if (nums[ mid] < target) {
287+ // 搜索区间变为 [ mid+1, right]
288+ left = mid + 1;
289+ }
290+ if (nums[ mid] > target) {
291+ // 搜索区间变为 [ left, mid-1]
292+ right = mid - 1;
293+ }
294+ }
295+ // 检查是否越界
296+ if (left >= nums.size() || nums[ left] != target)
297+ return -1;
298+ return left;
299+ }
265300```
266301
267302### 寻找最右边的满足条件的值
@@ -366,10 +401,30 @@ function binarySearchRight(nums, target) {
366401
367402##### C++
368403
369- 暂时空缺,欢迎 [ PR] ( https://github.com/leetcode-pp/leetcode-cheat/pulls )
370-
371404``` cpp
372-
405+ int binarySearchRight (vector<int >& nums, int target) {
406+ // 搜索区间为 [ left, right]
407+ int left = 0, right = nums.size() - 1;
408+ while (left <= right) {
409+ int mid = left + ((right - left) >> 1);
410+ if (nums[ mid] == target) {
411+ // 收缩左边界
412+ left = mid + 1;
413+ }
414+ if (nums[ mid] < target) {
415+ // 搜索区间变为 [ mid+1, right]
416+ left = mid + 1;
417+ }
418+ if (nums[ mid] > target) {
419+ // 搜索区间变为 [ left, mid-1]
420+ right = mid - 1;
421+ }
422+ }
423+ // 检查是否越界
424+ if (right < 0 || nums[ right] != target)
425+ return -1;
426+ return right;
427+ }
373428```
374429
375430### 寻找最左插入位置
0 commit comments