Skip to content

Commit 6afbf34

Browse files
committed
added problems
1 parent b4e6d9a commit 6afbf34

File tree

5 files changed

+119
-0
lines changed

5 files changed

+119
-0
lines changed
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
class Solution:
2+
def nextGreatestLetter(self, letters, target):
3+
l = 0
4+
r = len(letters) - 1
5+
6+
if letters[0] > target or letters[-1] <= target:
7+
return letters[0]
8+
9+
while l < r:
10+
mid = (l + r) // 2
11+
if letters[mid] > target:
12+
r = mid
13+
else:
14+
l = mid + 1
15+
16+
return letters[l]
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
# https://leetcode.com/problems/find-first-and-last-position-of-element-in-sorted-array/
2+
class Solution:
3+
def searchRange(self, nums, target):
4+
res = [-1, -1]
5+
6+
if len(nums) == 0: return res
7+
if nums[0] > target or nums[-1] < target: return res
8+
9+
first_idx = self.binarySearch(nums, target, True)
10+
last_idx = self.binarySearch(nums, target, False)
11+
12+
return [first_idx, last_idx]
13+
14+
def binarySearch(self, nums, target, isFirst):
15+
idx = -1
16+
l = 0
17+
r = len(nums) - 1
18+
19+
while l <= r:
20+
mid = (l + r) // 2
21+
if nums[mid] == target:
22+
idx = mid
23+
if isFirst:
24+
r = mid - 1
25+
else:
26+
l = mid + 1
27+
elif nums[mid] > target:
28+
r = mid - 1
29+
else:
30+
l = mid + 1
31+
32+
return idx
33+
34+
class Solution2:
35+
def searchRange(self, nums, target):
36+
l = 0
37+
r = len(nums) - 1
38+
39+
if not nums: return [-1, -1]
40+
if nums[0] > target or nums[-1] < target: return [-1, -1]
41+
42+
while nums[l] != nums[r]:
43+
mid = (l + r) // 2
44+
if nums[mid] > target:
45+
r = mid - 1
46+
elif nums[mid] < target:
47+
l = mid + 1
48+
else:
49+
if nums[l] < target:
50+
l += 1
51+
elif nums[r] > target:
52+
r -= 1
53+
54+
if nums[l] == target:
55+
return [l, r]
56+
else:
57+
return [-1, -1]
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
class Solution:
2+
def search(self, reader, target):
3+
l = 0
4+
r = 1
5+
6+
while reader.get(r) < target:
7+
r *= 2
8+
l = r // 2
9+
10+
while l <= r:
11+
mid = (l + r) // 2
12+
val = reader.get(mid)
13+
if val == target:
14+
return mid
15+
elif val > target:
16+
r = mid - 1
17+
else:
18+
l = mid + 1
19+
20+
return -1
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
class Solution:
2+
def peakIndexInMountainArray(self, arr):
3+
l = 0
4+
r = len(arr) - 1
5+
6+
while l < r:
7+
mid = (l + r) // 2
8+
if arr[mid] < arr[mid+1]:
9+
l = mid + 1
10+
else:
11+
r = mid
12+
13+
return l
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
class Solution:
2+
def findPeakElement(self, nums):
3+
l = 0
4+
r = len(nums) - 1
5+
6+
while l < r:
7+
mid = ((l + r) // 2) + 1
8+
if nums[mid-1] > nums[mid]:
9+
r = mid - 1
10+
else:
11+
l = mid
12+
13+
return l

0 commit comments

Comments
 (0)