二分查找
(牛客网—牛客题霸算法篇—NC160)
题目描述
给定一个元素升序的、无重复数字的整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标(下标从 0 开始),否则返回 -1
思路
Java实现
首先判断数组是否为空,为空直接返回-1
定义left和right,最初分别指向数组的两端
min=(left+right)/2
比较nums[min]与target的值
如果相等,返回min;
如果nums[min]<target,令left=min+1;
如果nums[min]>target,令right=min-1;
循环结束的条件是left<right
循环计数后,判断nums[left]的值与target的值是否相等,相等则返回left,否则返回-1
代码实现
import java.util.*;
public class Solution {
public int search (int[] nums, int target) {
// write code here
if(nums.length==0)
return -1;
int left=0;
int right=nums.length-1;
int min;
while(left<right){
min=(left+right)/2;
if(nums[min]==target){
return min;
}else if(nums[min]<target){
left=min+1;
}else{
right=min-1;
}
}
if(nums[left]==target)
return left;
return -1;
}
}