摒弃世俗浮躁
追求技术精湛

【力扣】704. 二分查找

给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target  ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1


示例 1:

输入: nums = [-1,0,3,5,9,12], target = 9
输出: 4
解释: 9 出现在 nums 中并且下标为 4

示例 2:

输入: nums = [-1,0,3,5,9,12], target = 2
输出: -1
解释: 2 不存在 nums 中因此返回 -1

提示:

  1. 你可以假设 nums 中的所有元素是不重复的。
  2. n 将在 [1, 10000]之间。
  3. nums 的每个元素都将在 [-9999, 9999]之间。

题解:

func search(nums []int, target int) int {
	// 定义 target 在左闭右闭的区间内,[left,right]
	left, right := 0, len(nums)-1
	// 当 left == right 时,区间 [left,right] 依然有效,所以用 <=
	for left <= right {
		// 中间的下标指针,这里用到了位移运算
		mid := left + (right - left>>1)
		if nums[mid] > target {
			// target 在左区间,所以 [left, mid - 1]
			right = mid - 1
		} else if nums[mid] < target {
			// target 在右区间,所以 [mid + 1, right]
			left = mid + 1
		} else {
			// nums[mid] == target 时,代表找到了目标值,直接返回其下标
			return mid
		}
	}
	// 循环完了,还没找到数组的值,这里返回 -1
	return -1
}
赞(0) 打赏
未经允许不得转载:时光日记 » 【力扣】704. 二分查找

评论 抢沙发

评论前必须登录!

 

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫

微信扫一扫

登录

找回密码

注册