Still we have slick solution:
try:
return [nums.index(target), len(nums) - 1 - nums[::-1].index(target)]
except:
return [-1, -1]
Run Time is 84 ms.
Or we can use binary search, just like last problem. Below is a solution with 3 binary search methods.
Solution:
# T:O(lgn) S:O(1) class Solution: # @param A, a list of integers # @param target, an integer to be searched # @return a list of length 2, [index1, index2] def searchRange(self, A, target): # Find the first index where target <= A[idx] left = self.binarySearch(lambda x, y: x <= y, A, target) if left >= len(A) or A[left] != target: return [-1, -1] # Find the first index where target < A[idx] right = self.binarySearch(lambda x, y: x < y, A, target) return [left, right - 1] def binarySearch(self, compare, A, target): start, end = 0, len(A) while start < end: mid = start + (end - start) / 2 if compare(target, A[mid]): end = mid else: start = mid + 1 return start def binarySearch2(self, compare, A, target): start, end = 0, len(A) - 1 while start <= end: mid = start + (end - start) / 2 if compare(target, A[mid]): end = mid - 1 else: start = mid + 1 return start def binarySearch3(self, compare, A, target): start, end = -1, len(A) while end - start > 1: mid = start + (end - start) / 2 if compare(target, A[mid]): end = mid else: start = mid return endRun Time: 52 ms
No comments:
Post a Comment