首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >天际线上最大的矩形

天际线上最大的矩形
EN

Code Golf用户
提问于 2022-02-14 07:07:22
回答 15查看 2.6K关注 0票数 16

天际线是一个正整数数组,每个整数代表建筑物的高度。例如,如果我们有数组[1,3,4,2,5,3,3],这将是ascii艺术中的天际线:

代码语言:javascript
复制
    #
  # #
 ## ###
 ######
#######

您的任务是查找天际线中最大矩形的区域。在这种情况下,最大的矩形区域为12。下面是突出显示的矩形:

代码语言:javascript
复制
    #
  # #
 ## ###
 RRRRRR
#RRRRRR

您可以假设输入至少包含一个建筑物(数组的长度>0)。这是密码-高尔夫,你知道该怎么做。

灵感来自困惑-SE贴子。

测试用例

代码语言:javascript
复制
[1] -> 1
[2, 2] -> 4
[3, 2, 1] -> 4
[1, 2, 3] -> 4
[1, 5, 1, 5] -> 5
[1, 4, 1, 4, 1] -> 5
[1, 4, 5, 4, 1] -> 12
[1, 5, 4, 5, 1] -> 12
[1, 2, 3, 5, 1, 3] -> 6
[1, 3, 3, 1, 4, 5, 2] -> 8
[1, 3, 3, 1, 1, 1, 1] -> 7
EN

回答 15

Code Golf用户

发布于 2022-02-14 08:50:58

八度,50字节

代码语言:javascript
复制
@(a)max(([c,v]=runlength([(a<=a').*a;0*a](:))).*v)

在网上试试!

基于我对PARI/GP的回答,但更有趣。这值得写约拿式的解释。

how

a = [1,3,4,2,5,3,3]为例。

  • a<=a'创建一个矩阵,其中(i,j)处的条目为a[j]<=a[i]:1 0 0 0 1 1 0 1 1 1 0 1 1 0 0 1 1 0 0 1 0 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 0 0 1 0 0 1 1 1 0 0 1 0 0 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 1 0 0 1 0 1 1 0 0 1 0 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0
  • .*a将矩阵的i-th列乘以a[i]:1 0 0 0 1 3 3 0 4 2 0 3 3 3 1 0 0 0 1 3 3 1 0 0 0 3 4 0 0 0 3 4 0 0 0 3 4 0 0 0 3 4 0 0 0 3 4 0 0 0 3 4 0 0 0 1 4 0 0 0 3 3 1 0 0 0 3 3 3 0 0 0 3 3 1 0 0 0 3 3 1 0 0 0 3 3 1 0 0 0 3 3 1 0 0 0 3 3 1 0 0 0 3 3 3 0 0 0 3 3 1 0 0 0 3 3 3 0 0 0 3 3 3 0 0 0
  • [...;0*a]在矩阵中附加一行零,以便在获取行长编码时分隔列:1 0 0 0 1 3 3 3 4 2 0 3 3 1 0 0 2 0 0 1 3 1 0 0 2 0 0 1 4 0 0 0 3 1 0 0 0
  • ...(:)将矩阵串联成列向量(实际输出是下一行向量的转置):1 1 1 0 3 3 3 0 0 0 4 0 4 0 0 0 2 2 2 0 0 0 5 0 0 0 3 3 3 0 3 0 3 00 3 3 0 3 3 3
  • [c,v]=runlength给出了游程长度编码,其中每次非零行对应于天际线中的一个矩形:C=7 2 2 1 3 3 3 1 1 1 4 6 4 1 4 2 2 2 1 3 1 v=1 0 3 0 3 0 4 0 4 0 5 0 3 0 3 0 3 0 3 0 0
  • ([c,v]=runlength(...)).*vcv元素乘以元素,给出每次运行的“面积”:7 0 6 0 9 0 4 0 4 0 12 0 5 0 0 0 9 0 6 0 9 9 0 9 0 0
  • 最后,max找到结果的最大值: 12
票数 9
EN

Code Golf用户

发布于 2022-02-14 07:35:52

Wolfram语言(数学),35字节

-5字节,因为@att。

代码语言:javascript
复制
Max[Tr[Min@#+0#]&/@Subsequences@#]&

在网上试试!

票数 6
EN

Code Golf用户

发布于 2022-02-14 07:42:14

05AB1E,8 字节数

代码语言:javascript
复制
ŒεWsg*}à

@UnrelatedString果冻回答港,所以一定要支持他/她!

在网上试试验证所有测试用例.

解释:

代码语言:javascript
复制
Œ       # Get all sublists of the (implicit) input-list
 ε      # Map each sublist to:
  W     #  Push its minimum (without popping the sublist)
   s    #  Swap so the sublist is at the top again
    g   #  Pop and push its length
     *  #  Multiply it by the minimum
 }à     # After the map: pop and push the maximum
        # (after which it is output implicitly as result)
票数 5
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codegolf.stackexchange.com/questions/242801

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档