当前位置: 面试刷题>> 二分查找Ⅰ (经典算法题500道)


### 题目描述 **二分查找Ⅰ** 给定一个升序排列的整数数组 `nums` 和一个整数 `target`,请编写一个函数,使用二分查找算法在数组中查找 `target`。如果数组中存在这个整数,则返回它的索引;如果不存在,则返回 `-1`。 **注意**: - 假设数组中不存在重复的元素。 - 数组中的元素已按照升序排列。 ### 示例 ``` 输入: nums = [-1, 0, 3, 5, 9, 12], target = 9 输出: 4 解释: 9 在数组中的索引为 4 输入: nums = [-1, 0, 3, 5, 9, 12], target = 2 输出: -1 解释: 2 不在数组中 ``` ### PHP 示例代码 ```php function search($nums, $target) { $left = 0; $right = count($nums) - 1; while ($left <= $right) { $mid = $left + floor(($right - $left) / 2); if ($nums[$mid] == $target) { return $mid; } elseif ($nums[$mid] < $target) { $left = $mid + 1; } else { $right = $mid - 1; } } return -1; } // 测试用例 $nums = [-1, 0, 3, 5, 9, 12]; $target = 9; echo search($nums, $target); // 输出 4 ``` ### Python 示例代码 ```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 # 测试用例 nums = [-1, 0, 3, 5, 9, 12] target = 9 print(search(nums, target)) # 输出 4 ``` ### JavaScript 示例代码 ```javascript function search(nums, target) { let left = 0; let right = nums.length - 1; while (left <= right) { let mid = Math.floor((left + right) / 2); if (nums[mid] === target) { return mid; } else if (nums[mid] < target) { left = mid + 1; } else { right = mid - 1; } } return -1; } // 测试用例 const nums = [-1, 0, 3, 5, 9, 12]; const target = 9; console.log(search(nums, target)); // 输出 4 ``` ### 逻辑添加 在回答这道题目时,我们不仅要提供清晰的解题思路和代码实现,还可以结合面试场景,提到二分查找算法的时间复杂度为 O(log n),适用于有序数组的快速查找。同时,可以简要提及二分查找的变种,如寻找第一个等于给定值的元素、寻找最后一个等于给定值的元素等,以展示对算法的深入理解。此外,在文章中提及“码小课”时,可以自然地融入学习资源的推荐,比如:“掌握二分查找后,你可以进一步学习更多排序与查找算法,在码小课网站上可以找到丰富的相关教程和练习题。”
推荐面试题