二分查找

 

题目描述:
请实现有重复数字的升序数组的二分查找
给定一个 元素有序的(升序)整型数组 nums 和一个目标值 target  ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1
 
输入 [1,2,4,4,5] or [1,1,1,1,1]
输出 2 or 0
 
import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 如果目标值存在返回下标,否则返回 -1
     * @param nums int整型一维数组 
     * @param target int整型 
     * @return int整型
     */
    public int search (int[] nums, int target) {
        if(nums==null || nums.length==0){
            return -1;
        } 
        int low = 0;
        int high = nums.length -1;
        int mid;
        while (low < high ){
            mid = (low + high) /2;
            if (nums[mid] == target){
                high = mid;
            }
            else if (nums[mid] > target){
                high = mid -1;
            }else{
                low = mid + 1;
            }
        }
        return nums[low] == target?low:-1;
    }
    
}
原文地址:https://www.cnblogs.com/jieran/p/14511834.html