美文网首页
Find First and Last Position of

Find First and Last Position of

作者: BLUE_fdf9 | 来源:发表于2018-10-22 03:43 被阅读0次

题目
Given an array of integers nums sorted in ascending order, find the starting and ending position of a given target value.

Your algorithm's runtime complexity must be in the order of O(log n).

If the target is not found in the array, return [-1, -1].

答案

class Solution {
    public int[] searchRange(int[] nums, int target) {
        if(nums.length == 0) return new int[]{-1,-1};
        // Two binary search, the first searches for the start of the range, second for the end of the range
        
        // Search start
        int start_idx = -1;
        int left = 0, right = nums.length - 1;
        while(left <= right) {
            int mid = left + (right - left ) / 2;
            int num_mid = nums[mid];
            if(target < num_mid) {
                right = mid - 1;
            }
            else if(target == num_mid) {
                start_idx = mid;
                right = mid - 1;
            }
            else {
                // target > num_mid
                left = mid + 1;
            }
        }
        
        // Search end
        int end_idx = -1;
        left = 0;
        right = nums.length - 1;
        while(left <= right) {
            int mid = left + (right - left ) / 2;
            int num_mid = nums[mid];
            if(target < num_mid) {
                right = mid - 1;
            }
            else if(target == num_mid) {
                end_idx = mid;
                left = mid + 1;
            }
            else {
                // target > num_mid
                left = mid + 1;
            }
        }
        if(start_idx == -1) return new int[]{-1,-1}; 
        return new int[]{start_idx, end_idx};
    }
}

相关文章

网友评论

      本文标题:Find First and Last Position of

      本文链接:https://www.haomeiwen.com/subject/cbhwzftx.html