Google算法题:E-二分查找

来源:互联网 发布:js 删除table tr 编辑:程序博客网 时间:2024/06/06 03:44


http://www.lintcode.com/zh-cn/problem/first-position-of-target/


http://www.jiuzhang.com/article/Google%202016%E5%B9%B412%E6%9C%88New%20Grad%20SDE%E7%94%B5%E9%9D%A2%E9%9D%A2%E7%BB%8F/


给定一个排序的整数数组(升序)和一个要查找的整数target,用O(logn)的时间查找到target第一次出现的下标(从0开始),如果target不存在于数组中,返回-1

样例

在数组 [1, 2, 3, 3, 4, 5, 10] 中二分查找3,返回2



class Solution {    /**     * @param nums: The integer array.     * @param target: Target to find.     * @return: The first position of target. Position starts from 0.     */    public int binarySearch(int[] nums, int target) {        //write your code here        if(nums==null || nums.length==0) return -1;                int n = nums.length;        int s = 0, e = n-1;        while(s<=e){            int m = (s+e)/2;            if(nums[m]==target){                while(m>0 && nums[m-1]==target){                    //由于找的是第一个满足target的下标,需要特殊处理                    m--;                }                return m;            }else if(nums[m]>target){                e=m-1;            }else{                s=m+1;            }        }        return -1;    }}