LeetCode 704.二分查找【Java解题】
作者:互联网
文章目录
1.题目
给定一个 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
提示:
- 你可以假设 nums 中的所有元素是不重复的。
- 将在 [1, 10000]之间。
- nums 的每个元素都将在 [-9999, 9999]之间。
2.解题思路
在有序的数组(nums)中利用二分法查找目标值(target)
3.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;
//将第一行注释是因为这样写有点问题,当left和right值过大时,两者之和会溢出。
int mid=left+(right-left)/2;//建议使用这个
if(target==nums[mid])
return mid;
else if(target>nums[mid])
left=mid+1;
else//此处的条件是(target<nums[mid])
right=mid-1;
}
return -1;//表示target不在nums中
}
}
4. 二分法回顾
- 二分法又叫折半查找。
- 该方法常用来查找数组中的某个元素。使用二分法的前提是该数组有序。
- 使用:
1)先定义两个变量:left、right,使mid=left+(right-left)/2。
2)若目标值target==nums[mid],则查找的值刚好与中间值相等。
3)若目标值target>nums[mid],则查找的值大于中间值,需要往数组中间值的较大端查找,此时使left=mid+1。
4)若目标值target<nums[mid],则查找的值小于中间值,需要往数组中间值的较小端查找,此时使right=mid-1。
标签:right,Java,target,nums,704,mid,int,LeetCode,left 来源: https://blog.csdn.net/qq_52111135/article/details/120680545