34. Find First and Last Position of Element in Sorted Array (Medium)

https://leetcode.com/problems/find-first-and-last-position-of-element-in-sorted-array/

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].

Example 1:

Input: nums = [5,7,7,8,8,10], target = 8
Output: [3,4]

Example 2:

Input: nums = [5,7,7,8,8,10], target = 6
Output: [-1,-1]

Solutions

class Solution {

    // Firstly, binary search the nums and find out one slot of equal value to target
    // Next, traverse both sides from above found slot.
    // Finally, work out the range of the target value

    public int[] searchRange(int[] nums, int target) {
        int[] ans = new int[]{-1, -1};

        if (nums == null || nums.length == 0) {
            return ans;
        }

        int len = nums.length;

        if (target < nums[0] || target > nums[len - 1]) {
            return ans;
        }

        int start = -1;
        int end = nums.length - 1;

        int mid = binarySearch(nums, target);
        if (mid < 0) {
            return ans;
        }

        int left = mid - 1;
        while (left >= 0 && nums[left] == target) {
            left--;
        }

        int right = mid + 1;
        while (right < len && nums[right] == target) {
            right++;
        }

        return new int[]{left + 1, right - 1};
    }

    public int binarySearch(int[] nums, int target) {
        int left = 0;
        int high = nums.length - 1;

        // [5,7,7,8,8,10] left=0, right=5, mid=2; left=3,right=5,mid=4, return.
        // [5,7,7,8,9,10] left=0, right=5, mid=2; left=3,right=5,mid=4; left=3,right=3,mid=3, return.
        while (left <= high) {
            int mid = (left + high) / 2;

            if (nums[mid] == target) {
                return mid;
            }

            if (nums[mid] < target) {
                left = mid + 1;
            } else {
                high = mid - 1;
            }
        }

        // not found
        return -1;
    }
}

Incorrect Solutions

References

Copyright © iovi.com 2017 all right reserved,powered by GitbookLast Modification: 2019-12-03 11:01:18

results matching ""

    No results matching ""