力扣704
- 算法学习推荐网站:代码随想录网站
题目描述:给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1
思路:就是一道普通的二分法题目,主要是要考虑left和right的边界问题,主要是不知道left<right还是left<=right容易造成迷惑,其实很简单,主要是看他们相等的时候有没有意义,从而确定下一次的搜索区间
方式一:left<=right
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; //为了防止int相加溢出
if(nums[middle]==target){
return middle;
}
if(nums[middle]>target){
right=middle-1;
}
if(nums[middle]<target){
left=middle+1;
}
}
return -1; //找不到直接返回-1即可
}
}
方式二:left<right
class Solution {
public int search(int[] nums, int target) {
int left=0;
int right=nums.length;
while(left<right){ //等于的时候是没有意义的
int middle=left+(right-left)/2; //为了防止int相加溢出
if(nums[middle]==target){
return middle;
}
if(nums[middle]>target){
right=middle;
}
if(nums[middle]<target){
left=middle+1;
}
}
return -1; //找不到直接返回-1即可
}
}