首页IT科技二分查找算法思路(二分查找-力扣(Java))

二分查找算法思路(二分查找-力扣(Java))

时间2025-07-17 07:18:43分类IT科技浏览4884
导读:题目描述 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。...

题目描述

给定一个 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; } }

提交截图

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
web.py框架(python web框架的整理)