@@ -69,6 +69,28 @@ export default {
69
69
return -1;
70
70
}` ,
71
71
} ,
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
+ } ,
72
94
] ,
73
95
} ,
74
96
{
@@ -143,6 +165,34 @@ export default {
143
165
return left;
144
166
}` ,
145
167
} ,
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
+ } ,
146
196
] ,
147
197
} ,
148
198
{
@@ -217,6 +267,35 @@ export default {
217
267
return right;
218
268
}` ,
219
269
} ,
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
+ } ,
220
299
] ,
221
300
} ,
222
301
{
@@ -225,19 +304,16 @@ export default {
225
304
{
226
305
language : "py" ,
227
306
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
241
317
` ,
242
318
} ,
243
319
{
@@ -280,19 +356,16 @@ function searchInsertLeft(nums, x) {
280
356
{
281
357
language : "py" ,
282
358
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
296
369
` ,
297
370
} ,
298
371
{
0 commit comments