def get_max_values_of_list(data_list, window_length):
    q = Queue()
    res = []
    for index, data in enumerate(data_list):
        put_queue(q, index, data_list)
        if q.peek() == index - window_length:
            q.poll()

        if index >= window_length - 1:
            res.append(data_list[q.peek()])
    return res
Exemplo n.º 2
0
    def test_queue(self):
        queue = Queue()
        self.assertEqual(queue.is_empty(), True)
        self.assertEqual(queue.peek(), None)

        queue.queue("first_in_line")
        self.assertEqual(queue.peek(), "first_in_line")
        self.assertEqual(queue.is_empty(), False)

        queue.queue("second_in_line")
        self.assertEqual(queue.de_queue(), "first_in_line")
        self.assertEqual(queue.peek(), "second_in_line")

        self.assertEqual(queue.de_queue(), "second_in_line")
        self.assertEqual(queue.is_empty(), True)
        self.assertEqual(queue.peek(), None)
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