1405 https://leetcode.com/problems/longest-happy-string/
단순히 dfs로 짜면 시간초과가 나왔다. 더 효율적으로 생각해보다가 가장 긴 길이를 만들어내려면 현재 존재하는 a,b,c중에서 가장 많이 존재하는 단어를 먼저 사용하는 전략으로 결과값을 만들어야 한다. 단어와 단어 카운트를 기반으로 힙을 만들어준 후 남아있는 단어중 갯수가 가장 많이 남아있는것부터 빼서 계산하는식으로 처리한다.
from heapq import *
class Solution:
def longestDiverseString(self, a: int, b: int, c: int) -> str:
s = ''
while a > 0 or b > 0 or c > 0:
heap = []
if a > 0 and s[-2:] != 'aa':
heappush(heap, [-a, 'a'])
if b > 0 and s[-2:] != 'bb':
heappush(heap, [-b, 'b'])
if c > 0 and s[-2:] != 'cc':
heappush(heap, [-c, 'c'])
if not heap:
break
count, word = heap[0]
s += word
if word == 'a':
a -= 1
elif word == 'b':
b -= 1
elif word == 'c':
c -= 1
return s
from collections import deque
class Solution:
def reorderList(self, head: Optional[ListNode]) -> None:
queue = deque()
root = head
while head:
head = head.next
if head:
queue.append(head)
node = root
f = 1
while True:
if not queue:
node.next = None
break
if f > 0:
node.next = queue.pop()
else:
node.next = queue.popleft()
f *= -1
node = node.next
class Solution:
def getModifiedArray(self, length: int, updates: List[List[int]]) -> List[int]:
ret = [0]*(length+1)
for start, end, inc in updates:
ret[start] += inc
ret[end+1] -= inc
for i in range(1, len(ret)):
ret[i] += ret[i-1]
return ret[:-1]
from heapq import *
class Solution:
def dailyTemperatures(self, t: List[int]) -> List[int]:
d = {}
heap = []
for i,tt in enumerate(t): # 모든 온도를 순회하면서
heappush(heap, [tt, i]) # 최소힙에 온도를 가중치로 저장함.
while heap:
if tt > heap[0][0]: # 현재의 온도보다 이전에 낮은 온도가 있었으면
d[heappop(heap)[1]] = i # 이전온도와 현 온도를 맵핑시켜줌
continue
break
ret = []
for i in range(len(t)):
if i not in d:
ret.append(0) # 맵핑된게 없으면 0
else:
ret.append(d[i]-i)
return ret