classSolution: defminGroups(self, intervals: List[List[int]]) -> int: # 核心在于: 寻找同时重叠的波浪 # 差分队列 maxVal=max([i[1] for i in intervals]) diff=[0]*(maxVal+1) # 0->maxVal
# 计算区间变化情况 for i,j in intervals: diff[i]+=1# 涨潮 if j+1<=maxVal: diff[j+1]-=1# 退潮 # 查看有多少区间上重叠了 # 最大值就是重叠的区间数目 res,t=0,0 for i in diff: t+=i res=max(res,t) return res
classSolution: defshiftingLetters(self, s: str, shifts) -> str: diff=[0]*(len(s)+1) # 构建差分 for st,e,shift in shifts: diff[st]+=shift*2-1 diff[e+1]-=shift*2-1 # 获取移动表 shift=[] for i in diff: if shift==[]: shift.append(i) else: shift.append(i+shift[-1]) # 输出 return"".join([chr(ord("a")+(ord(i)-ord("a")+dif)%26) for i,dif inzip(s,shift)])