二分查找—II
描述
请实现有重复数字的升序数组的二分查找
给定一个 元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的第一个出现的target,如果目标值存在返回下标,否则返回 -1
解题
Solution
/**
* 数组查找+表中最前位置
* 二分查找方法
*/
public class Solution {
public int search (int[] nums,int target){
//return twosearch(nums,target,0,nums.length-1);
int low=0;
int high=nums.length-1;
int mid;//非递归
while (low<=high){
mid=(low+high)/2;
if (nums[mid]==target){
while (mid!=0&&(nums[mid-1]==nums[mid])){
mid--;
}
return mid;
}else if (nums[mid]>target){
high=mid-1;
}else {
low=mid+1;
}
}
return -1;
}
public int twosearch(int[] nums,int target,int low,int high){
if (low>=high) return -1;
int midle=(low+high)/2;//递归方法
if(nums[midle]>target){
return twosearch(nums,target,low,midle-1);
}else if (nums[midle]<target){
return twosearch(nums,target,midle+1,high);
}else {
return midle;
}
}
}