Skip to content

Commit 1984052

Browse files
committed
feat: solve No.34
1 parent e7f7cda commit 1984052

File tree

1 file changed

+111
-0
lines changed

1 file changed

+111
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
# 34. Find First and Last Position of Element in Sorted Array
2+
3+
- Difficulty: Medium.
4+
- Related Topics: Array, Binary Search.
5+
- Similar Questions: First Bad Version, Plates Between Candles, Find Target Indices After Sorting Array.
6+
7+
## Problem
8+
9+
Given an array of integers `nums` sorted in non-decreasing order, find the starting and ending position of a given `target` value.
10+
11+
If `target` is not found in the array, return `[-1, -1]`.
12+
13+
You must write an algorithm with `O(log n)` runtime complexity.
14+
15+
 
16+
Example 1:
17+
```
18+
Input: nums = [5,7,7,8,8,10], target = 8
19+
Output: [3,4]
20+
```Example 2:
21+
```
22+
Input: nums = [5,7,7,8,8,10], target = 6
23+
Output: [-1,-1]
24+
```Example 3:
25+
```
26+
Input: nums = [], target = 0
27+
Output: [-1,-1]
28+
```
29+
 
30+
**Constraints:**
31+
32+
33+
34+
- `0 <= nums.length <= 105`
35+
36+
- `-109 <= nums[i] <= 109`
37+
38+
- `nums` is a non-decreasing array.
39+
40+
- `-109 <= target <= 109`
41+
42+
43+
44+
## Solution
45+
46+
```javascript
47+
/**
48+
* @param {number[]} nums
49+
* @param {number} target
50+
* @return {number[]}
51+
*/
52+
var searchRange = function(nums, target) {
53+
var index = findIndex(nums, target);
54+
return index === -1
55+
? [-1, -1]
56+
: [findLeft(nums, target, index), findRight(nums, target, index)];
57+
};
58+
59+
var findIndex = function(nums, target) {
60+
var left = 0;
61+
var right = nums.length - 1;
62+
while (left <= right) {
63+
var mid = left + Math.floor((right - left) / 2);
64+
if (nums[mid] === target) {
65+
return mid;
66+
} else if (nums[mid] > target) {
67+
right = mid - 1;
68+
} else {
69+
left = mid + 1;
70+
}
71+
}
72+
return -1;
73+
};
74+
75+
var findLeft = function(nums, target, index) {
76+
var left = 0;
77+
var right = index;
78+
while (left < right) {
79+
var mid = left + Math.floor((right - left) / 2);
80+
if (nums[mid] === target) {
81+
right = mid;
82+
} else {
83+
left = mid + 1;
84+
}
85+
}
86+
return left;
87+
};
88+
89+
var findRight = function(nums, target, index) {
90+
var left = index;
91+
var right = nums.length - 1;
92+
while (left < right) {
93+
var mid = left + Math.ceil((right - left) / 2);
94+
if (nums[mid] === target) {
95+
left = mid;
96+
} else {
97+
right = mid - 1;
98+
}
99+
}
100+
return right;
101+
};
102+
```
103+
104+
**Explain:**
105+
106+
nope.
107+
108+
**Complexity:**
109+
110+
* Time complexity : O(log(n)).
111+
* Space complexity : O(1).

0 commit comments

Comments
 (0)