Skip to content

Commit 7462b51

Browse files
committedJan 5, 2022
solves find first and last position of element in sorted array
1 parent 5d65e22 commit 7462b51

File tree

2 files changed

+39
-0
lines changed

2 files changed

+39
-0
lines changed
 

Diff for: ‎README.md

+1
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
| 29 | [Divide Two Integers](https://leetcode.com/problems/divide-two-integers) | [![Java](assets/java.png)](src/DivideTwoIntegers.java) | |
3939
| 31 | [Next Permutation](https://leetcode.com/problems/next-permutation) | [![Java](assets/java.png)](src/NextPermutation.java) | |
4040
| 33 | [Search in Rotated Sorted Array](https://leetcode.com/problems/search-in-rotated-sorted-array) | [![Java](assets/java.png)](src/SearchInRotatedSortedArray.java) | |
41+
| 33 | [Find First and Last Position of Element in Sorted Array](https://leetcode.com/problems/find-first-and-last-position-of-element-in-sorted-array) | [![Java](assets/java.png)](src/FindFirstAndLastPositionOfElementInSortedArray.java) | |
4142
| 35 | [Search Inserted Position](https://leetcode.com/problems/search-insert-position/) | [![Java](assets/java.png)](src/SearchInsertPosition.java) [![Python](assets/python.png)](python/search_insert_position.py) | |
4243
| 38 | [Count and Say](https://leetcode.com/problems/count-and-say) | [![Java](assets/java.png)](src/CountAndSay.java) [![Python](assets/python.png)](python/count_and_say.py) | |
4344
| 53 | [Maximum SubArray](https://leetcode.com/problems/maximum-subarray) | [![Java](assets/java.png)](src/MaximumSubArray.java) [![Python](assets/python.png)](python/maximum_sum_subarray.py) | |
+38
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
// https://leetcode.com/problems/find-first-and-last-position-of-element-in-sorted-array
2+
// T: O(logN)
3+
// S: O(1)
4+
5+
public class FindFirstAndLastPositionOfElementInSortedArray {
6+
public int[] searchRange(int[] nums, int target) {
7+
return new int[] {
8+
leftMostIndex(nums, target),
9+
rightMostIndex(nums, target)
10+
};
11+
}
12+
13+
private int leftMostIndex(int[] array, int target) {
14+
int left = 0, right = array.length - 1, middle;
15+
while (left <= right) {
16+
middle = left + (right - left) / 2;
17+
if (array[middle] == target) {
18+
if (middle - 1 >= 0 && array[middle - 1] == target) right = middle - 1;
19+
else return middle;
20+
} else if (array[middle] > target) right = middle - 1;
21+
else left = middle + 1;
22+
}
23+
return -1;
24+
}
25+
26+
private int rightMostIndex(int[] array, int target) {
27+
int left = 0, right = array.length - 1, middle;
28+
while (left <= right) {
29+
middle = left + (right - left) / 2;
30+
if (array[middle] == target) {
31+
if (middle + 1 < array.length && array[middle + 1] == target) left = middle + 1;
32+
else return middle;
33+
} else if (array[middle] > target) right = middle - 1;
34+
else left = middle + 1;
35+
}
36+
return -1;
37+
}
38+
}

0 commit comments

Comments
 (0)