Appearance
34. Find First and Last Position of Element in Sorted Array
https://leetcode.com/problems/find-first-and-last-position-of-element-in-sorted-array/
c++
class Solution {
public:
vector<int> searchRange(vector<int>& nums, int target) {
return search(nums, target, 0, nums.size() - 1);
}
vector<int> search(vector<int>& nums, int target, int l, int r) {
if (l > r) {
return {-1, -1};
}
int m = (l + r) / 2;
if (nums[m] < target) {
return search(nums, target, m + 1, r);
} else if (nums[m] > target) {
return search(nums, target, l, m - 1);
} else {
auto left = search(nums, target, l, m - 1);
auto right = search(nums, target, m + 1, r);
return {
left[0] == -1 ? m : left[0],
right[1] == -1 ? m : right[1]
};
}
}
};
go
func searchRange(nums []int, target int) []int {
return search(nums, target, 0, len(nums)-1)
}
func search(nums []int, target int, l int, r int) []int {
if l > r {
return []int{-1, -1}
}
m := (l+r) / 2
if nums[m] < target {
return search(nums, target, m+1, r)
} else if nums[m] > target {
return search(nums, target, l, m-1)
} else {
left := search(nums, target, l, m-1)
right := search(nums, target, m+1, r)
result := []int{left[0], right[1]}
if left[0] == -1 {
result[0] = m
}
if right[1] == -1 {
result[1] = m
}
return result
}
}
js
/**
* @param {number[]} nums
* @param {number} target
* @return {number[]}
*/
var searchRange = function(nums, target) {
return search(nums, target, 0, nums.length - 1)
}
function search(nums, target, l, r) {
if (l > r) {
return [-1, -1]
}
var m = (l + r) / 2 >> 0
if (nums[m] < target) {
return search(nums, target, m + 1, r)
} else if (nums[m] > target) {
return search(nums, target, l, m - 1)
} else {
let left = search(nums, target, l, m - 1)
let right = search(nums, target, m + 1, r)
return [
left[0] === -1 ? m : left[0],
right[1] === -1 ? m : right[1]
]
}
}
py
class Solution(object):
def searchRange(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
return self.search(nums, target, 0, len(nums) - 1)
def search(self, nums, target, l, r):
if l > r:
return [-1, -1]
m = (l + r) // 2
if nums[m] < target:
return self.search(nums, target, m + 1, r)
elif nums[m] > target:
return self.search(nums, target, l, m - 1)
else:
left = self.search(nums, target, l, m - 1)
right = self.search(nums, target, m + 1, r)
return [
m if left[0] == -1 else left[0],
m if right[1] == -1 else right[1]
]