Algorithm
本周的算法题为 11. 盛最多水的容器
给定一个长度为 n
的整数数组 height
。有 n
条垂线,第 i
条线的两个端点是 (i, 0)
和 (i, height[i])
。
找出其中的两条线,使得它们与 x
轴共同构成的容器可以容纳最多的水。
返回容器可以储存的最大水量。
**说明:**你不能倾斜容器。
输入:[1,8,6,2,5,4,8,3,7]
输出:49
解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。
实现代码如下:
var maxArea = function (height) {
let left = 0;
let right = height.length - 1;
let area = 0;
while (left < right) {
let currentArea = Math.min(height[left], height[right]) * (right - left);
area = Math.max(area, currentArea);
if (height[left] < height[right]) {
left++;
} else {
right--;
}
}
return area;
};
解题思路:
- 定义两个指针left和right,分别指向容器的左边界和右边界。
- 定义一个变量area用于存储最大面积的结果,初始值为0。
- 使用一个循环,当left小于right时进行迭代:计算当前的面积,即min(height[left], height[right]) * (right - left)。Math.min()返回传入参数中最小值。
- 如果当前面积大于area,则更新area的值。
- 如果height[left]小于height[right],则将left右移一位;否则将right左移一位。
- 循环结束后,返回area作为最大面积的结果。
Review
Napoleon’s Hat - ESL Lesson Plan - Breaking News English Lesson
- 拿破仑的帽子是拍卖史上最贵的,以210万美元的价格售出。
- 拿破仑大约有120顶帽子,本周这顶破记录的帽子由毛毡制成,上面有法国国旗的红、白、蓝三种颜色。
- 最近有好莱坞电影《拿破仑》上映,由雷德利·斯科特执导,华金·菲尼克斯饰演拿破仑,凡妮莎·柯比饰演约瑟芬。
Tip
项目中有些接口,请求的资源大小有200KB之多,在前端页面交互使用上体验很差,而这些资源通常都不会改变,频繁去请求作用不大,徒增服务器负担。为了解决这个问题,引入HTTP 304 状态码机制,当浏览器发起一个条件请求到服务器时,服务器会使用304状态码来表示请求资源未更新,可以直接使用当前缓存的资源,无需再重新从服务器下载。
背景、初衷和目标:304状态码主要是为了减少不必要的网络请求,减少服务器负担和提高性能而设计的。当客户端发起条件请求时,服务器可以通过304状态码告知客户端,所请求的资源未发生变化,可以直接使用当前缓存的资源。
优势和劣势:优势:可以减少网络请求加快前端页面加载速度,降低服务器负担。劣势:如果配置不正确,可能导致前端页面展示的不是最新的数据。
使用场景: 适用于请求资源过大的业务场景,或者图片、样式等静态资源。
组成部分和关键点:前端发起的条件请求时需要在请求头中包含条件标识,如If-Modified-Since、If-None-Match等,服务器收到请求后,判断资源是否有更新,如果没有更新会返回304状态码。
如下所示:
GET /example.html HTTP/1.1 Host: www.example.com If-None-Match: "abc123" If-Modified-Since: Fri, 24 Nov 2023 01:27:35 GMT HTTP/1.1 304 Not Modified
底层原理和关键实现:当服务器收到前端发起的请求之后,会比较请求中的条件标识和资源的最后更新时间或实体标签,判断资源是否有更新,如果没有更新则返回304状态码,否则会返回200状态码和最新的资源内容。
已有的实现和对比: 大多数主流的web服务器和浏览器都支持304状态码,如Apache、Nginx、IIS等。与传统的200状态码相比,304状态码能更有效地利用缓存,减少不必要的网络请求和降低服务器资源负担。
要验证服务器是否正确处理304状态码,可以打开浏览器的开发者工具中切换到 Network(网络)选项卡,查看指定的网络请求,在第一次请求之后的请求,是否显示 304 Not Modified ,然后其 Size 和Time 是否较少。如是,就说明在请求时,是使用了浏览器自身的缓存而不是重新从服务器下载资源。
Share
上周生病了之后,就没及时打卡这个活动了,整个人都晕晕的。只能这周补上了,加上RMPW活动,应该是要四篇,但也只能慢慢补了。