简要介绍
二分算法是算法题目中常见的一种优化算法,很好地体现了分治的思想。该算法不仅在算法题目中屡见不鲜,在实际工程中也十分热门,例如数据库索引、文件系统以及游戏 AI 的路径规划等。常见的二分算法类型包括二分答案、二分区间和二分浮点数。
二分答案:在有单调性的区间中找值,通过二分思想调整查找范围。
二分区间:搜索一个区间而非单个值,常应用于在区间内查找某一个解的情况。
二分浮点数:处理方式略有不同,但核心思想类似二分答案。
相关例题
二分查找
题目描述
给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target,写一个函数搜索 nums 中的 target。如果 target 存在返回下标,否则返回 -1。必须编写一个具有 O(log n) 时间复杂度的算法。
示例 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]之间。
题目分析
这是一道经典的二分答案题目,核心思想就是二分。
实现思路
定义两个指针,左指针 left 和右指针 right,分别指向数组的左右端点,计算中间点 mid。讨论三种情况:
nums[mid] == target:说明找到了,直接返回。nums[mid] > target:说明区间[mid, right]的值都大于target,舍弃该区间,在左边[left, mid - 1]继续查找,即right = mid - 1。nums[mid] < target:说明区间 的值都小于 ,舍弃该区间,在右边 继续查找,即 。


