Smallest Range

2018-05-15  本文已影响0人  GakkiLove

Given k sorted integer arrays, pick k elements (one element from each of sorted arrays), what is the smallest range.

Assumptions:

k >= 2
None of the k arrays is null or empty

Examples:

{ { 1, 4, 6 },

{ 2, 5 },

{ 8, 10, 15} }

pick one element from each of 3 arrays, the smallest range is {5, 8} (pick 6 from the first array, pick 5 from the second array and pick 8 from the third array).

import heapq
class Solution(object):
  def smallestRange(self, arrays):
    heap = []
    max_val = arrays[0][0]
    for i in xrange(len(arrays)):
      heapq.heappush(heap,(arrays[i][0],i,0))
      max_val = max(max_val,arrays[i][0])
    min_range = [-10**5, 10**5]
    while heap:
      min_val, i, j = heapq.heappop(heap)
      if max_val - min_val < min_range[1] - min_range[0] or (max_val - min_val == min_range[1] - min_range[0] and min_val < min_range[0]):
        min_range = [min_val,max_val]
      if  j + 1 < len(arrays[i]):
        max_val = max(max_val,arrays[i][j+1])
        heapq.heappush(heap,(arrays[i][j+1],i,j+1))
      else:
        return min_range
上一篇下一篇

猜你喜欢

热点阅读