@@ -69,6 +69,28 @@ export default {
6969 return -1;
7070 }` ,
7171 } ,
72+ {
73+ language : "cpp" ,
74+ text : `
75+ int binarySearch(vector<int>& nums, int target){
76+ if(nums.size() == 0)
77+ return -1;
78+
79+ int left = 0, right = nums.size() - 1;
80+ while(left <= right){
81+ int mid = left + ((right - left) >> 1);
82+ if(nums[mid] == target){ return mid; }
83+ // 搜索区间变为 [mid+1, right]
84+ else if(nums[mid] < target)
85+ left = mid + 1;
86+ // 搜索区间变为 [left, mid - 1]
87+ else
88+ right = mid - 1;
89+ }
90+ return -1;
91+ }
92+ ` ,
93+ } ,
7294 ] ,
7395 } ,
7496 {
@@ -143,6 +165,34 @@ export default {
143165 return left;
144166 }` ,
145167 } ,
168+ {
169+ language : "cpp" ,
170+ text : `
171+ int binarySearchLeft(vector<int>& nums, int target) {
172+ // 搜索区间为 [left, right]
173+ int left = 0, right = nums.size() - 1;
174+ while (left <= right) {
175+ int mid = left + ((right - left) >> 1);
176+ if (nums[mid] == target) {
177+ // 收缩右边界
178+ right = mid - 1;
179+ }
180+ if (nums[mid] < target) {
181+ // 搜索区间变为 [mid+1, right]
182+ left = mid + 1;
183+ }
184+ if (nums[mid] > target) {
185+ // 搜索区间变为 [left, mid-1]
186+ right = mid - 1;
187+ }
188+ }
189+ // 检查是否越界
190+ if (left >= nums.size() || nums[left] != target)
191+ return -1;
192+ return left;
193+ }
194+ ` ,
195+ } ,
146196 ] ,
147197 } ,
148198 {
@@ -217,6 +267,35 @@ export default {
217267 return right;
218268 }` ,
219269 } ,
270+ {
271+ language : "cpp" ,
272+ text : `
273+ int binarySearchRight(vector<int>& nums, int target) {
274+ // 搜索区间为 [left, right]
275+ int left = 0, right = nums.size() - 1;
276+ while (left <= right) {
277+ int mid = left + ((right - left) >> 1);
278+ if (nums[mid] == target) {
279+ // 收缩左边界
280+ left = mid + 1;
281+ }
282+ if (nums[mid] < target) {
283+ // 搜索区间变为 [mid+1, right]
284+ left = mid + 1;
285+ }
286+ if (nums[mid] > target) {
287+ // 搜索区间变为 [left, mid-1]
288+ right = mid - 1;
289+ }
290+ }
291+ // 检查是否越界
292+ if (right < 0 || nums[right] != target)
293+ return -1;
294+ return right;
295+ }
296+
297+ ` ,
298+ } ,
220299 ] ,
221300 } ,
222301 {
@@ -225,19 +304,16 @@ export default {
225304 {
226305 language : "py" ,
227306 text : `
228- def bisect_left(nums, x):
229- # 内置 api
230- bisect.bisect_left(nums, x)
231- # 手写
232- l, r = 0, len(nums) - 1
233- while l < r:
234- mid = (l + r) // 2
235- if nums[mid] < x:
236- l = mid + 1
237- else:
238- r = mid
239- # 由于 l 和 r 相等,因此返回谁都无所谓。
240- return l
307+ def bisect_left(nums, x):
308+ # 内置 api
309+ bisect.bisect_left(nums, x)
310+ # 手写
311+ l, r = 0, len(A) - 1
312+ while l <= r:
313+ mid = (l + r) // 2
314+ if A[mid] >= x: r = mid - 1
315+ else: l = mid + 1
316+ return l
241317 ` ,
242318 } ,
243319 {
@@ -280,19 +356,16 @@ function searchInsertLeft(nums, x) {
280356 {
281357 language : "py" ,
282358 text : `
283- def bisect_right(nums, x):
284- # 内置 api
285- bisect.bisect_right(nums, x)
286- # 手写
287- l, r = 0, len(nums) - 1
288- while l < r:
289- mid = (l + r) // 2
290- if nums[mid] > x:
291- r = mid
292- else:
293- l = mid + 1
294- # 由于 l 和 r 相等,因此返回谁都无所谓。
295- return l
359+ def bisect_right(nums, x):
360+ # 内置 api
361+ bisect.bisect_right(nums, x)
362+ # 手写
363+ l, r = 0, len(A) - 1
364+ while l <= r:
365+ mid = (l + r) // 2
366+ if A[mid] <= x: l = mid + 1
367+ else: r = mid - 1
368+ return l
296369 ` ,
297370 } ,
298371 {
0 commit comments