228. Summary Ranges
class Solution:
def summaryRanges(self, nums: List[int]) -> List[str]:
res = []
start, ls = 0, len(nums)
for i in range(ls):
if i + 1 < ls and nums[i + 1] == nums[i] + 1:
continue
if i == start:
res.append(str(nums[start]))
else:
res.append("%d->%d" % (nums[start], nums[i]))
start = i + 1
return res
475. Heaters
class Solution:
def findRadius(self, houses: List[int], heaters: List[int]) -> int:
heaters = sorted(heaters) + [float('inf')]
i = radius = 0
for house in sorted(houses):
while abs(house - heaters[i + 1]) <= abs(house - heaters[i]):
i += 1
radius = max(radius, abs(house - heaters[i]))
return radius
481. Magical String
class Solution:
def magicalString(self, n: int) -> int:
queue, ans, i = deque([2]), 1, 1
while i <= n - 2:
m = queue.popleft()
ans += (m == 1)
queue.extend([1 + (i % 2 == 0)] * m)
i += 1
return ans
565. Array Nesting
class Solution:
def arrayNesting(self, nums: List[int]) -> int:
res = 0
for i in range(len(nums)):
if nums[i] == -1: continue
count = 0
while nums[i] != -1:
nums[i], i = -1, nums[i]
count += 1
res = max(res, count)
return res
424. Longest Repeating Character Replacement
class Solution:
def characterReplacement(self, s: str, k: int) -> int:
d = {}
window = 0
for i, char in enumerate(s):
d[char] = d.get(char, 0) + 1
if window+1 - max(d.values()) <= k:
window += 1
else:
d[s[i-window]] -= 1
return window
239. Sliding Window Maximum
class Solution:
def maxSlidingWindow(self, nums: List[int], k: int) -> List[int]:
q = deque()
res = []
for i, cur in enumerate(nums):
while q and nums[q[-1]] <= cur:
q.pop()
q.append(i)
if q[0] == i - k:
q.popleft()
if i >= k - 1:
res.append(nums[q[0]])
return res