Re: [闲聊] 每日leetcode

楼主: DJYOMIYAHINA (通通打死)   2024-06-23 12:07:27
今天的好难喔
看安杀才知道 multiset跟monotonic deque这两个东西==
听都没听过
直接照抄答案
用两个monotonic deque来维护最大值和最小值。
increaseDeque[0] = 最小值
decreaseDeque[0] = 最大值
新元素加入时,对于最大值deque,不用保留比新元素num[j]小的值,因为这些值在j之前
,当子阵列跨过j时,这些值不会影响后面的答案,因此全部pop出去再append新元素。
相反地,对于最小值deque,不用保留比新元素大的值,先把比新元素大的值全部pop出去
再append,这样才能维持这两个deque的单调递增/递减。
当最大值-最小值不符合条件时,需要移动left pointer。移动过程中,如果遇到当前的
最大值或最小值,则要将其从左侧移出。
def longestSubarray(self, nums: List[int], limit: int) -> int:
ans, l = 0, 0
dec = collections.deque() # for maximum
inc = collections.deque() # for minimum
for r, num in enumerate(nums):
while dec and dec[-1] < num:
dec.pop()
dec.append(num)
while inc and inc[-1] > num:
inc.pop()
inc.append(num)
# dec[0] == maximum in subarray
# inc[0] == minimum in subarray
while dec[0]-inc[0] > limit:
if dec[0] == nums[l]:
dec.popleft()
if inc[0] == nums[l]:
inc.popleft()
l += 1
ans = max(ans, r-l+1)
return ans
作者: TokiwaKurumi (常磐胡桃)   2024-06-23 12:08:00
肥肥不会写程式
楼主: DJYOMIYAHINA (通通打死)   2024-06-23 12:09:00
肥肥我也不会:(
作者: Hinapig0519 (猪猪宝贝)   2024-06-23 12:09:00
肥肥只会hello world
作者: NCKUEECS (小惠我婆)   2024-06-23 12:09:00
别卷了
作者: smart0eddie (smart0eddie)   2024-06-23 12:09:00
大师
作者: sixB (6B)   2024-06-23 12:13:00
好 来写每日ㄌ
作者: oin1104 (是oin的说)   2024-06-23 12:14:00
这做法好屌 我哭了
作者: deatheo (逆十字)   2024-06-23 12:51:00
queue这个datastruct有教

Links booklink

Contact Us: admin [ a t ] ucptt.com