本篇文章为你整理了力扣 704.二分查找(Java)()的详细内容,包含有 力扣 704.二分查找(Java),希望能帮助你了解 力扣 704.二分查找(Java)。
给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/binary-search
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
简要描述二分法
首先应为一个有序数列,我们将会数字设定为一个数组nums,将要在数组中寻找的目标设置为target。在数组中,对数组中间值nums[middle]与target进行判断,并对其进行空间的压缩,然后再次判断新的nums[middle]与target的大小关系,直到nums[middle]与target相等为止
首先明确题目要求,为寻找目标值,若存在返回下标,不存在则返回-1,标准的二分查找
明确了二分查找要求后,确定使用左闭右闭还是左闭合又开,即选择[left,right]还是[left,right),这里我选择的是左闭右闭
确定了使用左闭右闭写法之后,便应该明确怎么写代码。由于目标值在[left,right]区间,所以while(left ? right)中?处应填写 = ,因为在[left,right]区间中,left == right是存在的,例[1,1],所以应当使用 =
同时判断语句if (nums[middle] target) 时,由于middle大于目标值,所以即目标值出现在左半边,所以应当将right(即右边界)赋值为middle - 1,因为判断条件为if (nums[middle] target),此时的nums[middle] 必然不是目标值,所以可以自然往左一位
而判断语句if (nums[middle] target)时,由于middle小于目标值,所以即目标值出现在右半边,所以应当将left(即左边界)赋值为middle + 1,原因参考上一点
当nums[middle] = tarage 时,直接return middle输出结果即可
最后在while循环外写入return -1表示目标值不存在即可
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;
if(nums[middle] target)
right = middle -1;
else if(nums[middle] target)
left = middle + 1;
else if(nums[middle] == target)
return middle;
return -1;
以上就是力扣 704.二分查找(Java)()的详细内容,想要了解更多 力扣 704.二分查找(Java)的内容,请持续关注盛行IT软件开发工作室。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。