题目
解法1:二分判定+sliding window
由于所求的这个最大长度一定唯一而且会在连续的整数中产生,所以可以用二分判定
- 选取一个特定长度,判断是否存在特定长度的subarray符合条件
- 对于每次判定,使用sliding window的方法,所以每次判定复杂度O(n)
- 总的复杂度O(nlogn)
class Solution:
def longestSubarray(self, nums: List[int], limit: int) -> int:
n = len(nums)
def clean_deq_max(i,mid,deq_max):
if deq_max and deq_max[0]==i-mid:
deq_max.popleft()
# 去除队尾比新元素小的值的index
while deq_max and nums[i]>nums[deq_max[-1]]:
deq_max.pop()
def clean_deq_min(i,mid,deq_min):
if deq_min and deq_min[0]==i-mid:
deq_min.popleft