Skip to content

Commit 8265fcb

Browse files
committed
solve problem Find First And Last Position Of Element In Sorted Array
1 parent f62cb36 commit 8265fcb

File tree

5 files changed

+129
-0
lines changed

5 files changed

+129
-0
lines changed

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -292,6 +292,7 @@ All solutions will be accepted!
292292
|48|[Rotate Image](https://leetcode-cn.com/problems/rotate-image/description/)|[java/py/js](./algorithms/RotateImage)|Medium|
293293
|74|[Search A 2d Matrix](https://leetcode-cn.com/problems/search-a-2d-matrix/description/)|[java/py/js](./algorithms/SearchA2dMatrix)|Medium|
294294
|153|[Find Minimum In Rotated Sorted Array](https://leetcode-cn.com/problems/find-minimum-in-rotated-sorted-array/description/)|[java/py/js](./algorithms/FindMinimumInRotatedSortedArray)|Medium|
295+
|34|[Find First And Last Position Of Element In Sorted Array](https://leetcode-cn.com/problems/find-first-and-last-position-of-element-in-sorted-array/description/)|[java/py/js](./algorithms/FindFirstAndLastPositionOfElementInSortedArray)|Medium|
295296

296297
# Database
297298
|#|Title|Solution|Difficulty|
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
# Find First And Last Position Of Element In Sorted Array
2+
We can solve this problem by binary search
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
class Solution {
2+
public int[] searchRange(int[] nums, int target) {
3+
int length = nums.length;
4+
if (length == 0)
5+
return new int[]{-1, -1};
6+
7+
int low = 0,
8+
high = length - 1;
9+
10+
while (low < high) {
11+
int mid = (low + high) / 2;
12+
13+
if (nums[mid] < target)
14+
low = mid + 1;
15+
else if (nums[mid] > target)
16+
high = mid - 1;
17+
else
18+
high = mid;
19+
}
20+
21+
if (nums[low] != target)
22+
return new int[]{-1, -1};
23+
24+
int temp = low;
25+
low = 0;
26+
high = length - 1;
27+
28+
while (low < high) {
29+
int mid = (int) Math.ceil((low + high) / 2.0);
30+
31+
if (nums[mid] < target)
32+
low = mid + 1;
33+
else if (nums[mid] > target)
34+
high = mid - 1;
35+
else
36+
low = mid;
37+
}
38+
39+
return new int[]{temp, low};
40+
}
41+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
/**
2+
* @param {number[]} nums
3+
* @param {number} target
4+
* @return {number[]}
5+
*/
6+
var searchRange = function(nums, target) {
7+
let length = nums.length
8+
if (length == 0)
9+
return [-1, -1]
10+
11+
let low = 0,
12+
high = length - 1
13+
14+
while (low < high) {
15+
let mid = parseInt((low + high) / 2)
16+
17+
if (nums[mid] < target)
18+
low = mid + 1
19+
else if (nums[mid] > target)
20+
high = mid - 1
21+
else
22+
high = mid
23+
}
24+
25+
if (nums[low] != target)
26+
return [-1, -1]
27+
28+
let temp = low
29+
low = 0
30+
high = length - 1
31+
32+
while (low < high) {
33+
let mid = Math.ceil((low + high) / 2)
34+
35+
if (nums[mid] < target)
36+
low = mid + 1
37+
else if (nums[mid] > target)
38+
high = mid - 1
39+
else
40+
low = mid
41+
}
42+
43+
return [temp, low]
44+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
class Solution(object):
2+
def searchRange(self, nums, target):
3+
"""
4+
:type nums: List[int]
5+
:type target: int
6+
:rtype: List[int]
7+
"""
8+
low = 0
9+
high = len(nums) - 1
10+
11+
if high < 0:
12+
return -1, -1
13+
14+
while low < high:
15+
mid = (low + high) / 2
16+
17+
if nums[mid] < target:
18+
low = mid + 1
19+
elif nums[mid] > target:
20+
high = mid - 1
21+
else:
22+
high = mid
23+
24+
if nums[low] != target:
25+
return -1, -1
26+
27+
i = low
28+
low = 0
29+
high = len(nums) - 1
30+
31+
while low < high:
32+
mid = int(math.ceil((low + high) / 2.0))
33+
34+
if nums[mid] < target:
35+
low = mid + 1
36+
elif nums[mid] > target:
37+
high = mid - 1
38+
else:
39+
low = mid
40+
41+
return i, low

0 commit comments

Comments
 (0)