Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit fbe1e00

Browse files
Merge pull request youngyangyang04#1590 from xiaomosimon/leetcode-dev
Update 0704.二分法查找 JavaScript和TypeScript版本
2 parents dee5d5d + 708c3ee commit fbe1e00

File tree

1 file changed

+12
-8
lines changed

1 file changed

+12
-8
lines changed

‎problems/0704.二分查找.md

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -290,10 +290,11 @@ func search(nums []int, target int) int {
290290
*/
291291
var search = function(nums, target) {
292292
// right是数组最后一个数的下标,num[right]在查找范围内,是左闭右闭区间
293-
let left = 0, right = nums.length - 1;
293+
let mid, left = 0, right = nums.length - 1;
294294
// 当left=right时,由于nums[right]在查找范围内,所以要包括此情况
295295
while (left <= right) {
296-
let mid = left + Math.floor((right - left)/2);
296+
// 位运算 + 防止大数溢出
297+
mid = left + ((right - left) >> 1);
297298
// 如果中间数大于目标值,要把中间数排除查找范围,所以右边界更新为mid-1;如果右边界更新为mid,那中间数还在下次查找范围内
298299
if (nums[mid] > target) {
299300
right = mid - 1; // 去左面闭区间寻找
@@ -316,10 +317,11 @@ var search = function(nums, target) {
316317
*/
317318
var search = function(nums, target) {
318319
// right是数组最后一个数的下标+1,nums[right]不在查找范围内,是左闭右开区间
319-
let left = 0, right = nums.length;
320+
let mid, left = 0, right = nums.length;
320321
// 当left=right时,由于nums[right]不在查找范围,所以不必包括此情况
321322
while (left < right) {
322-
let mid = left + Math.floor((right - left)/2);
323+
// 位运算 + 防止大数溢出
324+
mid = left + ((right - left) >> 1);
323325
// 如果中间值大于目标值,中间值不应在下次查找的范围内,但中间值的前一个值应在;
324326
// 由于right本来就不在查找范围内,所以将右边界更新为中间值,如果更新右边界为mid-1则将中间值的前一个值也踢出了下次寻找范围
325327
if (nums[mid] > target) {
@@ -340,9 +342,10 @@ var search = function(nums, target) {
340342

341343
```typescript
342344
function search(nums: number[], target: number): number {
343-
let left: number = 0, right: number = nums.length - 1;
345+
let mid:number, left: number = 0, right: number = nums.length - 1;
344346
while (left <= right) {
345-
let mid: number = left + Math.floor((right - left) / 2);
347+
// 位运算 + 防止大数溢出
348+
mid = left + ((right - left) >> 1);
346349
if (nums[mid] > target) {
347350
right = mid - 1;
348351
} else if (nums[mid] < target) {
@@ -359,9 +362,10 @@ function search(nums: number[], target: number): number {
359362

360363
```typescript
361364
function search(nums: number[], target: number): number {
362-
let left: number = 0, right: number = nums.length;
365+
let mid:number, left: number = 0, right: number = nums.length;
363366
while (left < right) {
364-
let mid: number = left + Math.floor((right - left) / 2);
367+
// 位运算 + 防止大数溢出
368+
mid = left +((right - left) >> 1);
365369
if (nums[mid] > target) {
366370
right = mid;
367371
} else if (nums[mid] < target) {

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /