CheckiO는,이 블로그는 파이썬에서 할을 자신의 생각을 기록하기 위해 주로하여 코딩 능력을 향상 코드 게임, 주소 어려운 도전에 파이썬과 자바 스크립트와 흥미로운 작업 초보자 및 고급 프로그래머를위한 체크 포인트 및 구현 코드에서 문제 다른 위대한 하나님이 코드를 작성에서뿐만 아니라 배운다.
CheckiO 공식 웹 사이트 : https://checkio.org/
내 CheckiO 홈 : https://py.checkio.org/user/TRHX/
열 CheckiO 문제 솔루션 시리즈 : https://itrhx.blog.csdn.net/category_9536424.html
CheckiO 문제 소스에 대한 모든 솔루션 : https://github.com/TRHX/Python-CheckiO-Exercise
제목 설명
에서 직사각형 최대 히스토그램 [] :리스트 주어진 행렬의 최대 영역의 히스토그램을 추구리스트 엘리먼트 히스토그램 구성된 최대 직사각형 영역을 계산 사각형의 모든 높이의 막대 그래프를 나타낸다.
[링크] : https://py.checkio.org/mission/largest-histogram/
[Enter] 키 : 직사각형 모든 히스토그램에서의 높이
[출력] : 최대 사각형
[가정] : 0 <len (data) <1000
[실시 예] :
largest_histogram([5]) == 5
largest_histogram([5, 3]) == 6
largest_histogram([1, 1, 4, 1]) == 4
largest_histogram([1, 1, 3, 1]) == 4
largest_histogram([2, 1, 4, 5, 1, 3, 3]) == 8
코드 구현
def largest_histogram(histogram):
i = 0
max_value = 0
stack = []
histogram.append(0)
while i < len(histogram):
if len(stack) == 0 or histogram[stack[-1]] <= histogram[i]:
stack.append(i)
i += 1
else:
now_idx = stack.pop()
if len(stack) == 0:
max_value = max(max_value,i * histogram[now_idx])
else:
max_value = max(max_value,(i- stack[-1] -1) * histogram[now_idx])
return max_value
if __name__ == "__main__":
#These "asserts" using only for self-checking and not necessary for auto-testing
assert largest_histogram([5]) == 5, "one is always the biggest"
assert largest_histogram([5, 3]) == 6, "two are smallest X 2"
assert largest_histogram([1, 1, 4, 1]) == 4, "vertical"
assert largest_histogram([1, 1, 3, 1]) == 4, "horizontal"
assert largest_histogram([2, 1, 4, 5, 1, 3, 3]) == 8, "complex"
print("Done! Go check it!")
테라스 해답
테라스 해답 NO.1
def largest_histogram(h):
result = min(h) * len(h)
for w in range(1, len(h)):
for i in range(len(h) - w + 1):
result = max(result, min(h[i:i + w]) * w)
return result
테라스 해답 NO.2
def largest_histogram(h):
n = len(h)
return max((j - i) * min(h[i:j]) for i in range(n) for j in range(i+1, n+1))
테라스 해답 NO.3
def largest_histogram(histogram):
return max(height * max(len(strip) for strip in ''.join('x' if x >= height else ' ' for x in histogram).split()) for height in set(histogram))
테라스 해답 NO.4
def mesure(hist):
return min(hist) * len(hist)
def sub_histograms(hist):
for start in range(len(hist)):
for stop in range(start+1, len(hist)+1):
yield hist[start:stop]
def largest_histogram(histogram):
return max(map(mesure, sub_histograms(histogram)))