二分查找
题目: 给定一个 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
解题思路:
在本题中,因为二分查找,所以需要划分范围,每个范围的边界值无法判断,,所以一开始就要比较两个边界值,即
if(nums[0]==target){ return 0; }
if(nums[nums.length-1]==target){ return nums.length-1; }
计算中间值
比较中间值与查找值的大小选定区间,
使中间值成为一个边界值。
直到某个进行比较的边界值与所查找的值相等,返回下角坐标
或者寻找不到对应值,等待循环结束返回-1
寻找循环时要注意循环次数,例如
输入:nums= [-1,0,3,5,9,12],target= 9 输出: 4
此数列循环次数多于nums.length / 2 所以,循环次数为nums.length
此题代码为
class Solution { public int search(int[] nums, int target) { int x=nums.length-1,y=0,z=0,n=0;; if(nums[0]==target){ return 0; } if(nums[x]==target){ return x; } while(n<x){ z=(x+y)/2; if(nums[z]>target){ x=z; }else if(nums[z]<target){ y=z; }else{ return z; } n++; } return -1; } }
浙公网安备 33010602011771号