int binarySearch(vector<int>& nums, int target){
if(nums.size() == 0)
return -1;
int left = 0, right = nums.size() - 1;
while(left <= right){
// Prevent (left + right) overflow
int mid = left + (right - left) / 2;
if(nums[mid] == target){ return mid; }
else if(nums[mid] < target) { left = mid + 1; }
else { right = mid - 1; }
}
// End Condition: left > right
return -1;
}
算法概述:
初始条件:left = 0, right = length-1
终止:left > right
向左查找:right = mid-1
向右查找:left = mid+1
二分查找:般由三个主要部分组成:
预处理:如果集合未排序,则进行排序。
二分查找|:使用循环或递归在每次比较后将查找空间划分为两半。
后处理 :在剩余空间中确定可行的候选者。
转载自:https://leetcode-cn.com/explore/learn/card/binary-search/209/template-i/835/