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
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