1. Algorithm: leetCode.414
给定一个非空数组,返回此数组中第三大的数。如果不存在,则返回数组中最大的数。要求算法时间复杂度必须是O(n)。
示例 1:
输入: [3, 2, 1] 输出: 1
解释: 第三大的数是 1.
示例 2:输入: [1, 2] 输出: 2
解释: 第三大的数不存在, 所以返回最大的数 2 .
示例 3:输入: [2, 2, 3, 1]
输出: 1
解释: 注意,要求返回第三大的数,是指第三大且唯一出现的数。
存在两个值为2的数,它们都排第二。来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/third-maximum-number
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
用一个长度有限的Set来保存前三个最大的数,python原生没有找到类似SortedSet
的数据结构,所以在内部又加了一个判断
class Solution:
def thirdMax(self, nums: List[int]) -> int:
max_set = set()
for num in nums:
max_set.add(num)
if len(max_set) > 3:
ordered_max = sorted(list(max_set))
max_set.remove(ordered_max[0])
ordered_set = sorted(list(max_set))
return ordered_set[1] if len(ordered_set) == 2 else ordered_set[0]
2. Review
3. Tip: MIME-sniffing
什么是MIME-sniffing
通常情况下浏览器通过Content-Type
来分辨响应类型,当发现响应类型未指定或者类型错误时,会尝试启用MIME-sniffing
来猜测的资源类型。
可能有什么危险
如果精心制作一张图片(或者音频之类),在其中嵌入可以被浏览器展示和执行的HTML和JavaScript代码。
如果未关闭MIME-sniffing
,那么浏览器会直接执行嵌入的JavaScript,而不是显示图像。
也就是说攻击者可以利用MIME-sniffing
发起[[XSS跨站脚本攻击]],对于网站以及访问者都会有危险。
如何避免MIME sniffing的问题
- 在HTTP头部加入
X-Content-Type-Options: nosniff
,IE和Chrome会关闭MIME sniffing- 但这也要求网站的提供者在响应中明确提供返回资源的类型
- 另外可以使用一个单独的子域处理用户的上传请求,这样可以避免XSS攻击影响主站点