**Objective**: You have k lists of sorted integers. Find the smallest range that includes at least one number from each of the k lists.

This is very nice and tricky solution, This problem was asked in the Google interview for software engineer position.

**Example**:

Smallest range will be 2, [1,3], it will contain 3 from list A[], 1 from list B[] and 2 from list C[].

**Approach:**

- We will modify the heap implementation for this solution. This approach will be quite similar to “Merge k-sorted array” solution we had discussed.
- Create Min-Heap of type HeapNode.(
**HeapNode-**Every Node will store the data and the list no from which it belongs). - Now take one element from each of the K list and create HeapNode object and insert into min-Heap.
- While inserting keep track of maximum value node inserted, call it as
*currMax*. - Extract the minimum Node from the min-Heap call it as
*min*, calculate the.*range = currMax-min* - The extracted node will also contain the list to which it belongs, insert the next element from that list into min-Heap.
- Keep track of the minimum range after every iteration of extracting min node and inserting new node into the heap.
- If any point of time any list gets over, return the range, this will be the smallest range in K-list which contains at least one element from each list.
- See the gif below for better understanding.

**Complete Code:**

**Output:**

Smallest Range is: 2 from 1 To 3

In this code we are using extra space O(n)

Here is the simple solution in min(O(n),O(m),O(l)) and constant extra space

https://github.com/jafar9/c-prg/blob/master/smallestrange.c