一、题目要求
给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。
题目链接
示例:
输入: nums = [-1,0,3,5,9,12], target = 2
输出: -1
解释: 2 不存在 nums 中因此返回 -1
二、思路
这道题目的前提是数组为有序数组,同时题目还强调数组中无重复元素,所以使用使用二分法。
如果我们定义 target 是在一个在左闭右闭的区间里,也就是[left, right]。可以有如下代码:
class Solution {
public int search(int[] nums, int target) {
int left =0;
//注意这里不是用nums.length(),
//length()获取字符串的长度,
//length是获取数组的长度
int right = nums.length-1;
//当while (left <= right) 要使用 <= ,因为left == right是有意义的。
while(left<=right){
int middle = left+((right-left)/2);
if(nums[middle]>target){
right = middle-1;
}else if(nums[middle]<target){
left = middle+1;
}else{
return middle;
}
}
return -1;
}
}
总结
以上就是今天要讲的内容,本文仅仅简单介绍了二分法的题解,而此题需要注意的是对区间的定义