题目:
给定一个 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
解题思路:利用二分查找法,二分查找的基本思想是将n个元素分成大致相等的两部分,取a [n/2]与x做比较,如果x=a [n/2],则找到x,算法中止;如果x<a [n/2],则只要在数组a的左半部分继续搜索x,如果x>a [n/2],则只要在数组a的右半部搜索x.
步骤:
- 初始化两个指针,一个指向数组的开始(low),一个指向数组的结束(high)。
- 计算中间元素的索引 mid = (low + high) >>> 2(使用整数除法)。
- 检查中间元素是否是要查找的元素。如果是,返回 mid。
- 如果要查找的元素小于中间元素,更新 high = mid - 1, 并在数组的左半部分重复步骤 2 和 3。
- 如果要查找的元素大于中间元素,更新 low = mid + 1,并在数组的右半部分重复步骤 2 和 3。
- 如果 low > high,说明元素不在数组中,返回 -1 或其他表示未找到的值。
代码如下:
class Solution {
public int search(int[] nums, int target) {
int i = 0;
int j = nums.length - 1;
while (i <= j) {
int mid = (i + j) >>>1;
if (target > nums[mid]) {
i = mid +1;
}else if (target < nums[mid]) {
j = mid - 1;
}else {
return mid;
}
}
return -1;
}
}
小伙伴快去试试吧!!!
标签:二分,target,nums,704,元素,mid,int,数组,LeetCode From: https://blog.csdn.net/qq_54839572/article/details/139565322