def get_num(arr, num):
    if arr is None or len(arr) == 0:
        return

    qmin = Queue()
    qmax = Queue()
    start = 0
    end = 0
    res = 0
    length = len(arr)
    while start < length:
        while end < length:
            while (not qmax.is_empty()) and arr[qmax.peek()] <= arr[end]:
                qmax.poll()
            qmax.add(end)
            while (not qmin.is_empty()) and arr[qmin.peek()] >= arr[end]:
                qmin.poll()
            qmin.add(end)
            if arr[qmax.peek()] - arr[qmin.peek()] > num:
                break
            end += 1
        print(start, end - 1)
        res += end - start
        if qmax.peek() == start:
            qmax.poll()
        if qmin.peek() == start:
            qmin.poll()
        start += 1
    return res
Exemplo n.º 2
0
class DogCatQueue(object):
    def __init__(self):
        self.content = Queue()
        self.length_of_dog = 0
        self.length_of_cat = 0
        self.length_of_queue = 0

    def add(self, data):
        self.content.add(data)
        if data.get_pet_type == 'cat':
            self.length_of_cat += 1
        elif data.get_pet_type == 'dog':
            self.length_of_dog += 1
        self.length_of_queue += 1

    def poll_all(self):
        return self.poll_all()

    def _poll_what(self, what):
        for _ in range(self.length_of_queue):
            out = self.content.poll()
            if out.get_pet_type == what:
                yield out
            else:
                self.add(out)

    def poll_dog(self):
        self._poll_what('dog')

    def poll_cat(self):
        self._poll_what('cat')

    def is_empty(self):
        return self.length_of_queue == 0

    def is_dog_empty(self):
        return self.length_of_dog == 0

    def is_cat_empty(self):
        return self.length_of_cat == 0