从有序的数组中通过中间值来寻找最佳匹配。
例如:nums[2,4,5,6,7]中target为2,则先比较nums[(0+4)/2]与2的大小,若2小于该值则选择其值左边剩下的数组来筛选,大于则右边。
大致思路:
从数组中找出一个:
let left = 1;let right = n;while(left < right){const mid = Math.floor(left + (right - left)/2);if(nums[mid]>=target)right = mid;elseleft = mid + 1 ;}return left;
找出target在数组中所应该在的位置。
剑指 Offer 53 - II. 0~n-1中缺失的数字

思路:
运用二分来找目的值,当中间值索引所对应的值不等于索引时,说明前面发生了缺失,若等于,则说明后面发生了缺失
var missingNumber = function(nums) {if(nums[0]!=0)return 0;let left = 0;let right = nums.length-1;while(left<=right){const mid = left + Math.floor((right-left)/2);if(nums[mid]==mid)left = mid+1;else right = mid-1;}return left;};
剑指 Offer 11. 旋转数组的最小数字

思路:
运用二分,倘若中间值小于最右的值,则说明中间到右边的范围内可以忽略,若大于最右的值,则左边到中间+1的范围可以忽略。因为最右的是从最小值递增的最大值,大于最右则说明一定大于最小值,所以也可以忽略。
看官方解答或许更加可以理解。
var minArray = function(numbers) {let left = 0;let right = numbers.length-1;while(left<right){const mid = left + Math.floor((right-left)/2);if(numbers[mid]<numbers[right])right = mid;else if(numbers[mid]>numbers[right])left = mid+1;else right -= 1;}return numbers[left];};
