记录递归解数字出现在递增数组的第一次和第二次位置

class Solution {
    public int[] searchRange(int[] nums, int target) {

        return recur(0, nums.length - 1, nums, target);
    }

    public int[] recur(int left, int right, int[] nums, int target) {
        while (left <= right) {
            int mid = (left + right) >> 1;
            if (nums[mid] > target) {
                right = mid - 1;
            } else if (nums[mid] < target) {
                left = mid + 1;
            } else {
                if (nums[left] != target) {
		 // 因为left不是target需要向右移动
         因为nums{left}不等于target,需要向右移动去寻找,同理调用递归
                    left = recur(left + 1, mid, nums, target)[0];
                }
                if (nums[right] != target) {
                    right = recur(mid, right - 1, nums, target)[1];
                }
                return new int[] {left, right};
            }
        }
        return new int[] {-1, -1};
    }
}

思路:只要nums【mid】>=target的时候,说明还需要移动右端点,直到nums【mid】<target,然后左端点移动,导致left>right是循环结束,结果值就是上一次循环的结果。

全部评论

相关推荐

看牛客上感觉牛油都是985/211硕,本科生都很少见呀。现在秋招有佬拿到offer了嘛
职场水母:大多数本科生都在急着谈恋爱吧,能上牛客的少之又少,倒是硕士在这里有很多,这部分人群走的路及其相似,当年都选择了考研,到现在找工作都喜欢上牛客,不得不说还是挺有远见的大家。大家都是有远见的牛马
点赞 评论 收藏
分享
07-07 17:06
已编辑
深圳技术大学 golang
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务