Skip to content

Commit 5d65e22

Browse files
solves search in rotated sorted array
1 parent d5a84e9 commit 5d65e22

File tree

2 files changed

+29
-0
lines changed

2 files changed

+29
-0
lines changed

Diff for: README.md

+1
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
| 28 | [Needle in Haystack](https://leetcode.com/problems/implement-strstr) | [![Java](assets/java.png)](src/NeedleInHaystack.java) [![Python](assets/python.png)](python/needle_in_haystack.py) | |
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) | |
40+
| 33 | [Search in Rotated Sorted Array](https://leetcode.com/problems/search-in-rotated-sorted-array) | [![Java](assets/java.png)](src/SearchInRotatedSortedArray.java) | |
4041
| 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) | |
4142
| 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) | |
4243
| 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) | |

Diff for: src/SearchInRotatedSortedArray.java

+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
// https://leetcode.com/problems/search-in-rotated-sorted-array
2+
// T: O(logN)
3+
// SL O(1)
4+
5+
public class SearchInRotatedSortedArray {
6+
int search(int[] array, int target) {
7+
final int shift = minElementIndex(array);
8+
int left = 0, right = array.length - 1, middle, realMiddle;
9+
while (left <= right) {
10+
middle = (left + right) / 2;
11+
realMiddle = (middle + shift) % array.length;
12+
if(array[realMiddle] == target) return realMiddle;
13+
if(array[realMiddle] < target) left = middle + 1;
14+
else right = middle - 1;
15+
}
16+
return -1;
17+
}
18+
19+
private int minElementIndex(int[] array) {
20+
int left = 0, right = array.length - 1, middle;
21+
while(left < right){
22+
middle = (left + right) / 2;
23+
if(array[middle] > array[right]) left = middle + 1;
24+
else right = middle;
25+
}
26+
return left;
27+
}
28+
}

0 commit comments

Comments
 (0)