diff options
| author | Myoungjin JEON <jeongoon@gmail.com> | 2020-08-29 23:38:29 +1000 |
|---|---|---|
| committer | Myoungjin JEON <jeongoon@gmail.com> | 2020-08-29 23:38:29 +1000 |
| commit | 742082a24c81062e6598a6aec22571a07a2f23cd (patch) | |
| tree | f898fe9a3ccddb1f2f9d91cdc2febe7046f5ad63 /challenge-075/lubos-kolouch/python | |
| parent | 113c25e7c3e065fb32fbcae91cb1c7444db89c1f (diff) | |
| parent | 38afe9eed7226ee88f6c5884a26035041af56082 (diff) | |
| download | perlweeklychallenge-club-742082a24c81062e6598a6aec22571a07a2f23cd.tar.gz perlweeklychallenge-club-742082a24c81062e6598a6aec22571a07a2f23cd.tar.bz2 perlweeklychallenge-club-742082a24c81062e6598a6aec22571a07a2f23cd.zip | |
Merge remote-tracking branch 'upstream/master' into ch-075
Diffstat (limited to 'challenge-075/lubos-kolouch/python')
| -rw-r--r-- | challenge-075/lubos-kolouch/python/ch-2.py | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/challenge-075/lubos-kolouch/python/ch-2.py b/challenge-075/lubos-kolouch/python/ch-2.py new file mode 100644 index 0000000000..306bcae7c3 --- /dev/null +++ b/challenge-075/lubos-kolouch/python/ch-2.py @@ -0,0 +1,62 @@ +#!/usr/bin/env python +""" Perl Weekly challenge 075 Task 2 - Largest histogram """ + + +def printHistogram(histogram): + """ print the histogram """ + + hist_max = max(histogram) + + for i in range(hist_max, 0, -1): + my_str = str(i) + + for bar in histogram: + my_str += '#' if bar >= i else ' ' + + print(my_str) + + my_str = '_' + for _ in histogram: + my_str += '_' + + print(my_str) + + my_str = ' ' + for item in histogram: + my_str += str(item) + + print(my_str) + +def largestRectangle(histogram): + stack = list() + max_area = 0 + index = 0 + + while index < len(histogram): + if (not stack) or (histogram[stack[-1]] <= histogram[index]): + stack.append(index) + index += 1 + else: + top_of_stack = stack.pop() + area = (histogram[top_of_stack] * ((index - stack[-1] - 1) + if stack else index)) + + max_area = max(max_area, area) + + while stack: + + top_of_stack = stack.pop() + + area = (histogram[top_of_stack] * ((index - stack[-1] - 1) + if stack else index)) + + max_area = max(max_area, area) + + printHistogram(histogram) + + return max_area + + +assert largestRectangle([2, 1, 4, 5, 3, 7]) == 12 +assert largestRectangle([3, 2, 3, 5, 7, 5]) == 15 + |
