仅供个人学习使用
题目描述:
给定一个 n
个元素有序的(升序)整型数组 nums
和一个目标值 target
,写一个函数搜索 nums
中的 target
,如果目标值存在返回下标,否则返回 -1
。
示例 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
题目解析:
本题的实质是二分查找,定义左右两个指针left、right,开始时分别指向数组的首和尾,以及一个中间值mid=(left+right)/2。然后就是分情况讨论,mid和target的大小关系:
- nums[mid]=target,直接返回mid;
- nums[mid]<target,则说明target在mid的右边,left指针移动到mid的右边,即left=mid+1;
- nums[mid]>target,则说明target在mid的左边,right指针移动到mid的左边,即right=mid-1;
实现代码:
java
class Solution {
public int search(int[] nums, int target) {
int left = 0;
int right = nums.length-1;
while(left<=right){
int mid = (left+right)/2;
if(nums[mid] == target){
return mid;
}else if(nums[mid]>target){
right = mid-1;
}else{
left = mid+1;
}
}
return -1; //查找失败
}
}