北京六方云 2021.09.24 笔试题

(作者投的是算法岗,选择题和判断题都是深度学习的问题,可参考吴恩达的课程及课后练习)

编程题

题目描述

给定一个升序排序的数组和一个目标值,找出该目标值在数组中的起始下标和结束下标并返回,如果没有这个目标值,则返回[-1,-1]。

分析设计

很典型的二分查找的题目,稍有变形,给定的数组里可能有重复数字,我的思路是找到最左边的等于目标值的下标,然后依次向后遍历到最后一个等于目标值的下标。

代码实现

class Solution{
    public int[] getBound(int[] nums, int target){
        int l = 0, r = nums.length - 1;
        while(l < r){
            int mid = l + (r - l) / 2;
            if(nums[mid] < target){
                l = mid + 1;
            }
            else{
                r = mid;
            }
        }
        if(nums[l] != target){
            return new int[]{-1, -1};
        }
        int[] ans = new int[2];
        ans[0] = l;
        while(l < nums.length && nums[l] == target){
            l++;
        }
        ans[1] = l - 1;
        return ans;
    }
}

(不知道大家有没有什么其他的好的方法,求指导)