程序员代码面试指南 python实现(第一章 栈和队列 :最大值减去最小值小于或等于num的子数组数量)

程序员代码面试指南 python实现(最大值减去最小值小于或等于num的子数组数量)

最大值减去最小值小于或等于num的子数组数量

题目描述
在这里插入图片描述
解答
在这里插入图片描述

class Deque(object):
    def __init__(self):
        self.data = []

    def isEmpty(self):
        return self.data == []

    def addFront(self,newElem):
        self.data.insert(0,newElem)

    def addRear(self,newElem):
        self.data.append(newElem)

    def removeFront(self):
        return self.data.pop(0)

    def removeRear(self):
        return self.data.pop()

    def peekFront(self):
        return self.data[0]

    def peekRear(self):
        return self.data[len(self.data)-1]

    def size(self):
        return len(self.data)

def getNum(arr,num):
    if arr == None or len(arr) == 0:
        return  0
    qmin = Deque()
    qmax = Deque()

    i=0
    j=0
    res = 0

    while i < len(arr):
        while j < len(arr):
            while qmin.isEmpty() != True and arr[qmin.peekRear()] >= arr[j]:
                qmin.removeRear()
            qmin.addRear(j)

            while qmax.isEmpty() != True and arr[qmax.peekRear()] <= arr[j]:
                qmax.removeRear()
            qmax.addRear(j)

            if arr[qmax.peekFront()] - arr[qmin.peekFront()] > num:
                break

            j=j+1

        if qmin.peekFront() == i:
            qmin.removeFront()
        if qmax.peekFront() == i:
            qmax.removeFront()
        res += j-i
        i += 1

    return  res
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值