704. 二分查找
给定一个 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
解题思路:
1.获取到数组的长度
2.比较target和nums.length/2的大小,大于就在后半段继续查找,否则就在前半段继续查找
每次查找都会将查找范围是缩小一半,二分查找的时间复杂度是O(logn)
public class Search {
public static int search(int[] nums, int target){
// 定义头尾
int head = 0 ,tail=nums.length-1;
int mid;
while(head<=tail){
mid = (tail - head)/2+head;
if (target<nums[mid]){
tail = mid - 1;
}else if (target > nums[mid]){
head = mid +1;
}else {
return mid;
}
}
return -1;
}
public static void main(String[] args){
int result;
int[] arr = new int[] {9,8,7,6,5};
//int[] arr = [1123,434,343,44324];
result = search(arr,9);
System.out.print(result);
}
}