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

Difficulty:
Related Topics:
Similar Questions:

Problem

Given an array of integers nums sorted in non-decreasing order, find the starting and ending position of a given target value.

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

You must write an algorithm with O(log n) runtime complexity.

  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] 

Example 3:

Input: nums = [], target = 0 Output: [-1,-1] 

  Constraints:

Solution

/** * @param {number[]} nums * @param {number} target * @return {number[]} */ var searchRange = function(nums, target) { var index = findIndex(nums, target); return index === -1 ? [-1, -1] : [findLeft(nums, target, index), findRight(nums, target, index)]; }; var findIndex = function(nums, target) { var left = 0; var right = nums.length - 1; while (left <= right) { var mid = left + Math.floor((right - left) / 2); if (nums[mid] === target) { return mid; } else if (nums[mid] > target) { right = mid - 1; } else { left = mid + 1; } } return -1; }; var findLeft = function(nums, target, index) { var left = 0; var right = index; while (left < right) { var mid = left + Math.floor((right - left) / 2); if (nums[mid] === target) { right = mid; } else { left = mid + 1; } } return left; }; var findRight = function(nums, target, index) { var left = index; var right = nums.length - 1; while (left < right) { var mid = left + Math.ceil((right - left) / 2); if (nums[mid] === target) { left = mid; } else { right = mid - 1; } } return right; }; 

Explain:

nope.

Complexity: