-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathk_lists_minimal_range.py
64 lines (53 loc) · 1.47 KB
/
k_lists_minimal_range.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# class Item(object):
# def __init__(self, val, list_i):
# self.val = val
# self.list_i = list_i
#
#
# class RangeFinder(object):
matrix = [
[4, 10, 15, 24, 26],
[0, 9, 12, 20],
[5, 18, 22, 30]
]
def get_list_tuples(matrix):
result = []
for i in range(len(matrix)):
# print map(lambda x: (x, i), matrix[i])
result += map(lambda x: (x, i), matrix[i])
return sorted(result, key=lambda x: x[0])
# print get_list_tuples(matrix)
def get_range(matrix):
lt = []
for i in range(len(matrix)):
lt += map(lambda x: (x, i), matrix[i])
lt = sorted(lt, key=lambda x: x[0])
set_size = len(matrix)
min_range = float("+infinity")
result = []
for i in range(len(lt)):
s = set()
for j in range(i, len(lt)):
s.add(lt[j][1])
if len(s) == set_size:
r = lt[j][0] - lt[i][0]
min_range = min([r, min_range])
result = lt[i:j+1]
break
return result
def get_range2(matrix):
lt = get_list_tuples(matrix)
set_size = len(matrix)
min_range = float("+infinity")
result = []
for i in range(len(lt)):
s = set()
for j in range(i, len(lt)):
s.add(lt[j][1])
if len(s) == set_size:
r = lt[j][0] - lt[i][0]
min_range = min([r, min_range])
result = lt[i:j+1]
break
return result
print get_range(matrix)