二分法
例题704
给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。
提示: 可假设 nums 中所有元素不重复。n 将在 [1, 10000]之间。 nums 的每个元素都将在 [-9999,9999]之间。
解题思路:
第一种写法:
定义target在左闭右闭区间:
- while (left <= right)
- if (nums[middle] > target)
- 举例:
class Solution {
public int search(int[] nums, int target) {
int left=0;
int right=nums.length-1;
while(left<=right){
int middle=left+((right-left)/2);
if (nums[middle]>target){
right=middle-1;
}else if(target>nums[middle]){
left=middle+1;
}else{
return middle;
}
}
return -1;
}
};
第二种写法
定义target在一个在左闭右开区间里,二分法边界处理方式截然不同:
- while (left < right)
- if(nums[middle] > target) - 依然用上图查找元素8:
相关题目联系
35.搜索插入位置
34.在排序数组中查找元素的第一个和最后一个位置
69.x 的平方根
367.有效的完全平方数