牢骚&安利题目

感觉自己越来越蠢了

  • 最近做leetcode的题,做一题卡一题。
  • 于是乎我就来安利几道题吧(就是我自己没想出来或者没写出来)。

84. Largest Rectangle in Histogram

题意描述
给出一个长度为n的非负整数序列A。Ai表示一个宽度为1,高度为Ai的矩形。现在这n个矩形全都下对齐地紧挨在一起,求整个图的最大矩形面积。

算法分析
具体就是用一个栈维护一个上升高度序列,当某个高度下降时,就逐个出栈并统计面积。
这题难点其实是在细节处理上。并不是说很容易就想到用栈去做,而是想到某一种数据结构去维护,但是怎么维护、怎么求解?我的话,也想过用栈,但没想到怎么做,于是乎最后我还是去找了一下discuss。。
时间复杂度:O(n)

85. Maximal Rectangle

就是上一题的强化版,从序列变成了矩阵。
方法就是枚举每一行,用上一题的方法求解即可。
时间复杂度:O(n^2)

164. Maximum Gap

题意描述
给出长度为n的乱序非负序列,问若将该序列变为有序序列,相邻两个数的最大差值是多少。要求在线性时间复杂度和空间复杂度下求解。

算法分析
我先说这题最重要的一个结论吧。(就是因为没想到这个啊结果我做不出来啊,果然智商低了)
设最大的数字是A,最小的数字是B,根据抽屉原理,我们可以知道排序后相邻两个数字差值的最大值p有:
p>=(AB)/(n1)
那么这题就可以在线性时间内求解了。
首先,我们将数值分为n-1段,数值i根据自己的大小就会放在第j段中。
j=(iB)/(n1)
根据我们前面的结论可以知道,差值的最大值一定不会出现在同一段的两个数字之间。
因此我们只需要维护每一段的最大值和最小值。最后答案一定是某一个有效段的最小值与其前一个有效段的最大值的差值。
所谓有效段,即使说该段中存在数字,因为很可能有很多段中是并没有数字的。
时间复杂度:O(n)

324. Wiggle Sort II

题目描述
给出一个乱序序列nums,我们需要将里面的元素进行位置变换,使得:nums[0] < nums[1] > nums[2] < nums[3]……

Example:
(1) Given nums = [1, 5, 1, 1, 6, 4], one possible answer is [1, 4, 1, 5, 1, 6].
(2) Given nums = [1, 3, 2, 2, 3, 1], one possible answer is [2, 3, 1, 3, 1, 2]. 

题目保证有解,要求是用O(n)的时间,O(1)的额外空间求解。

牢骚
这题似乎可以不断的贪心+分类讨论求解。但是我想了很久都没有想得很明白,细节太多了。对每种情况讨论的过程中又会衍生新的情况和问题。总之剪不断理还乱。
于是乎我把这题安利给的xy同学。xy大腿用什么快选中位数+什么函数映射的方法似乎做出来了。但是他跑得特别慢,比用O(nlogn)排序再开O(n)空间生成新序列都慢得多。他的理由是那个函数映射怎么怎么太慢了。。
于是乎这题就死了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个使用HTML和JavaScript实现的代码示例: HTML代码: ```html <!DOCTYPE html> <html> <head> <title>排队选择题</title> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script> </head> <body> <div class="container"> <h2>通常在排队的时候你来晚了,下面哪种方式属于你或比较接近你?</h2> <form> <label class="radio-inline"><input type="radio" name="option" value="1">规规矩矩地排在最后一个</label> <label class="radio-inline"><input type="radio" name="option" value="2">面带微笑,随便排在最后</label> <label class="radio-inline"><input type="radio" name="option" value="3">不夹塞,帮着维持秩序或是夹塞,呵斥别人让开点</label> <label class="radio-inline"><input type="radio" name="option" value="4">满腹牢骚,怪自己来得晚或是排队的人太多,并试着夹塞,别人不让还不高兴,甚至与别人争吵</label> </form> <button onclick="getResult()" class="btn btn-primary">提交</button> <br><br> <h3 id="result"></h3> </div> <script> function getResult() { var options = document.getElementsByName("option"); var result = ""; for (var i = 0; i < options.length; i++) { if (options[i].checked) { if (options[i].value == "1") { result = "您的选择是规规矩矩地排在最后一个。很好,这是一种很文明的行为,遵守秩序和规则是我们每个人的责任。"; } else if (options[i].value == "2") { result = "您的选择是面带微笑,随便排在最后。虽然这种行为并不违反规定,但是我们也应该尽量遵守规则和秩序。"; } else if (options[i].value == "3") { result = "您的选择是不夹塞,帮着维持秩序或是夹塞,呵斥别人让开点。虽然有时候夹塞确实可以让我们更快地完成任务,但是我们也应该尽量尊重他人的权益。"; } else if (options[i].value == "4") { result = "您的选择是满腹牢骚,怪自己来得晚或是排队的人太多,并试着夹塞,别人不让还不高兴,甚至与别人争吵。这种行为是不文明的,不仅会影响到自己的形象,也会影响到他人的情绪。"; } break; } } document.getElementById("result").innerHTML = result; } </script> </body> </html> ``` 这个代码实现了题目的功能,使用了Bootstrap框架实现了样式美化。在表单提交时,使用了JavaScript进行判断,根据用户的选择输出相应的结果,并将结果显示在页面上。 需要注意的是,这里只是一个简单的示例,如果您需要更加完善的实现,需要对代码进行相应的修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值