Skip to content

Commit 4ef3fe5

Browse files
committed
finish max len incremental sub arr
1 parent f952063 commit 4ef3fe5

File tree

1 file changed

+52
-0
lines changed

1 file changed

+52
-0
lines changed
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
class Node:
2+
def __init__(self, val):
3+
self.val = val
4+
self.next_list = []
5+
self.max_len = 0
6+
7+
def append(self, next_val):
8+
self.next_list.append(next_val)
9+
10+
def is_leaf(self):
11+
return len(self.next_list) == 0
12+
13+
14+
def max_len_incre_sub_arr(arr):
15+
node_arr = map(lambda val: Node(val), arr)
16+
17+
def max_len_incre_sub_arr_detail(beg_idx):
18+
if node_arr[beg_idx].max_len == 0:
19+
if beg_idx == len(arr) - 1:
20+
node_arr[beg_idx].max_len = 1
21+
else:
22+
candidates = filter(lambda node: node.val > node_arr[beg_idx].val,
23+
[max_len_incre_sub_arr_detail(i) for i in range(beg_idx + 1, len(arr))])
24+
if len(candidates) == 0:
25+
node_arr[beg_idx].max_len = 1
26+
else:
27+
max_len = max(map(lambda node: node.max_len, candidates))
28+
node_arr[beg_idx].max_len = 1 + max_len
29+
node_arr[beg_idx].next_list = filter(lambda node: node.max_len == max_len, candidates)
30+
31+
return node_arr[beg_idx]
32+
33+
def print_tree(root_node):
34+
def dfs_detail(node_ref, node_level):
35+
blank_str = ''.join([" "] * node_level)[:-1] + '|_' if node_level > 0 else 'root'
36+
37+
print '%-50s' % (blank_str + str(node_ref.val))
38+
for child_node in node_ref.next_list:
39+
dfs_detail(child_node, node_level + 1)
40+
41+
dfs_detail(root_node, 0)
42+
43+
max_len_incre_sub_arr_detail(0)
44+
max_val = max(map(lambda node: node.max_len, node_arr))
45+
root_node = Node(-1)
46+
root_node.next_list = filter(lambda node: node.max_len == max_val, node_arr)
47+
print max_val
48+
print_tree(root_node)
49+
50+
51+
if __name__ == '__main__':
52+
max_len_incre_sub_arr([7, 2, 3, 1, 5, 8, 9, 6])

0 commit comments

Comments
 (0)