给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。
输入: nums = [-1,0,3,5,9,12], target = 9
输出: 4
解释: 9 出现在 nums 中并且下标为 4
输入: nums = [-1,0,3,5,9,12], target = 2
输出: -1
解释: 2 不存在 nums 中因此返回 -1
class Solution {
public int search(int[] nums, int target) {
int low = 0, high = nums.length - 1;
int middle = (low + high)/2;
if(nums[high] < target || nums[low] > target)//预先判断一下
return -1;
while(high >= low){
if(nums[middle] > target){
high = middle - 1;
middle = (low + high)/2;
}else if(nums[middle] < target){
low = middle + 1;
middle = (low + high)/2;
}else{
return middle;
}
}
return -1;
}
}
第一次提交因为length直接作为下标而越界出错,当时是如下例子没有通过。于是想着可以预先用端点的nums[low]和nums[high]预先判断一下。但好像测试用例没有太刁难,执行用时都是0ms。。。
[-1,0,3,5,9,12] 13
应当是根据例子(需求)特性决定是不是加的,如果超越范围的查找不多,而此段查找执行次数极大,倒也是不应加入此判断。