704.二分查找
- 电脑硬件
- 2025-09-14 18:51:02

1、题目链接
leetcode /problems/binary-search/description/
2、题目描述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 提示: 你可以假设 nums 中的所有元素是不重复的。 n 将在 [1, 10000]之间。 nums 的每个元素都将在 [-9999, 9999]之间。
3、题解 二分查找算法详解与实现 解题步骤 初始化边界:设定两个指针left和right,分别指向数组的起始位置和结束位置。循环条件:当left小于等于right时,继续搜索。否则,返回-1表示未找到目标值。计算中间点:取left和right的中间值mid,防止溢出可以使用mid = left + (right - left) / 2。比较中间点与目标值: 如果nums[mid]等于目标值target,返回当前mid作为结果。如果nums[mid]小于目标值,说明目标值在右半部分,更新left为mid + 1。如果nums[mid]大于目标值,说明目标值在左半部分,更新right为mid - 1。 返回结果:如果循环结束仍未找到目标值,则返回-1。 实现代码 Java public int search(int[] nums, int target) { int left = 0, right = nums.length - 1; while (left <= right) { int mid = left + (right - left) / 2; if (nums[mid] == target) return mid; else if (nums[mid] < target) left = mid + 1; else right = mid - 1; } return -1; } Python def search(nums, target): left, right = 0, len(nums) - 1 while left <= right: mid = left + (right - left) // 2 if nums[mid] == target: return mid elif nums[mid] < target: left = mid + 1 else: right = mid - 1 return -1 Go func search(nums []int, target int) int { left, right := 0, len(nums) - 1 for left <= right { mid := left + (right - left) / 2 if nums[mid] == target { return mid } else if nums[mid] < target { left = mid + 1 } else { right = mid - 1 } } return -1 } JavaScript function search(nums, target) { let left = 0, right = nums.length - 1; while (left <= right) { const mid = Math.floor(left + (right - left) / 2); if (nums[mid] === target) return mid; else if (nums[mid] < target) left = mid + 1; else right = mid - 1; } return -1; }