二分查找

大耗子 2021年02月20日 16次浏览

二分查找

  • 注意,跳出循环的判定条件left<=right一定要有等号,否则会丢失边界。
int findNums(vector<int>& nums, int k) {
	int left = 0;
	int right = nums.size() - 1;
	int mid = (left + right) >> 1;
	// 注意,此处一定要加上=号,不加就会忽略边界值
	while (left <= right) {
		mid = (left + right) >> 1;
		if (nums[mid] == k) {
			return mid;
		}
		else if (nums[mid] < k) {
			left = mid + 1;
		}
		else {
			right = mid - 1;
		}

	}
	return -1;
}