File tree Expand file tree Collapse file tree 5 files changed +99
-0
lines changed
container-with-most-water
find-minimum-in-rotated-sorted-array
longest-repeating-character-replacement
longest-substring-without-repeating-characters
search-in-rotated-sorted-array Expand file tree Collapse file tree 5 files changed +99
-0
lines changed Original file line number Diff line number Diff line change 1+ # TC : O(n)
2+ # SC : O(1)
3+ class Solution :
4+ def maxArea (self , height : List [int ]) -> int :
5+ low = 0
6+ high = len (height ) - 1
7+ max_val = 0
8+
9+ while low < high :
10+ val = min (height [low ], height [high ]) * (high - low )
11+ max_val = max (val , max_val )
12+ if height [low ] < height [high ]:
13+ low += 1
14+ elif height [low ] > height [high ]:
15+ high -= 1
16+ # increment low or decrement high
17+ else :
18+ low += 1
19+
20+ return max_val
Original file line number Diff line number Diff line change 1+ class Solution :
2+ # TC: O(log(n)) - The search space is halved each round until the minimum is found
3+ # SC: O(1) - Only a few extra variables are used regardless of input size
4+ def findMin (self , nums : List [int ]) -> int :
5+ low , high = 0 , len (nums ) - 1
6+
7+ while low < high :
8+ mid = (high + low ) // 2
9+
10+ if nums [mid ] > nums [high ]:
11+ low = mid + 1
12+ else :
13+ high = mid
14+
15+ return nums [low ]
Original file line number Diff line number Diff line change 1+ # TC : O(n)
2+ # SC : O(1)
3+ class Solution :
4+ def characterReplacement (self , s : str , k : int ) -> int :
5+ count = {}
6+ result = 0
7+
8+ left = 0
9+ maxFrequency = 0
10+ for right in range (len (s )):
11+ count [s [right ]] = 1 + count .get (s [right ], 0 )
12+ maxFrequency = max (maxFrequency , count [s [right ]])
13+
14+ while (right - left + 1 ) - maxFrequency > k :
15+ count [s [left ]] -= 1
16+ left += 1
17+
18+ result = max (result , right - left + 1 )
19+
20+ return result
Original file line number Diff line number Diff line change 1+ # TC : O(n)
2+ # SC : O(n)
3+ class Solution :
4+ def lengthOfLongestSubstring (self , s : str ) -> int :
5+ charSet = set ()
6+ left = 0
7+ longest_length = 0
8+
9+ for right in range (len (s )):
10+ while s [right ] in charSet :
11+ charSet .remove (s [left ])
12+ left += 1
13+ charSet .add (s [right ])
14+ longest_length = max (longest_length , right - left + 1 )
15+
16+ return longest_length
Original file line number Diff line number Diff line change 1+ # O(log n)
2+ # O(1)
3+
4+
5+ class Solution :
6+ def search (self , nums : List [int ], target : int ) -> int :
7+ left , right = 0 , len (nums ) - 1
8+
9+ while left <= right :
10+ mid = (left + right ) // 2
11+
12+ if nums [mid ] == target :
13+ return mid
14+
15+ # Check if left half is sorted
16+ if nums [left ] <= nums [mid ]:
17+ if nums [left ] <= target < nums [mid ]:
18+ right = mid - 1
19+ else :
20+ left = mid + 1
21+ # Otherwise, right half is sorted
22+ else :
23+ if nums [mid ] < target <= nums [right ]:
24+ left = mid + 1
25+ else :
26+ right = mid - 1
27+
28+ return - 1
You can’t perform that action at this time.
0 commit comments