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;
};

解题思路:

  1. 定义两个指针left和right,分别指向容器的左边界和右边界。
  2. 定义一个变量area用于存储最大面积的结果,初始值为0。
  3. 使用一个循环,当left小于right时进行迭代:计算当前的面积,即min(height[left], height[right]) * (right - left)。Math.min()返回传入参数中最小值。
  4. 如果当前面积大于area,则更新area的值。
  5. 如果height[left]小于height[right],则将left右移一位;否则将right左移一位。
  6. 循环结束后,返回area作为最大面积的结果。

Review

Napoleon’s Hat - ESL Lesson Plan - Breaking News English Lesson

  1. 拿破仑的帽子是拍卖史上最贵的,以210万美元的价格售出。
  2. 拿破仑大约有120顶帽子,本周这顶破记录的帽子由毛毡制成,上面有法国国旗的红、白、蓝三种颜色。
  3. 最近有好莱坞电影《拿破仑》上映,由雷德利·斯科特执导,华金·菲尼克斯饰演拿破仑,凡妮莎·柯比饰演约瑟芬。

Tip

项目中有些接口,请求的资源大小有200KB之多,在前端页面交互使用上体验很差,而这些资源通常都不会改变,频繁去请求作用不大,徒增服务器负担。为了解决这个问题,引入HTTP 304 状态码机制,当浏览器发起一个条件请求到服务器时,服务器会使用304状态码来表示请求资源未更新,可以直接使用当前缓存的资源,无需再重新从服务器下载。

  1. 背景、初衷和目标:304状态码主要是为了减少不必要的网络请求,减少服务器负担和提高性能而设计的。当客户端发起条件请求时,服务器可以通过304状态码告知客户端,所请求的资源未发生变化,可以直接使用当前缓存的资源。

  2. 优势和劣势:优势:可以减少网络请求加快前端页面加载速度,降低服务器负担。劣势:如果配置不正确,可能导致前端页面展示的不是最新的数据。

  3. 使用场景: 适用于请求资源过大的业务场景,或者图片、样式等静态资源。

  4. 组成部分和关键点:前端发起的条件请求时需要在请求头中包含条件标识,如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
    
  5. 底层原理和关键实现:当服务器收到前端发起的请求之后,会比较请求中的条件标识和资源的最后更新时间或实体标签,判断资源是否有更新,如果没有更新则返回304状态码,否则会返回200状态码和最新的资源内容。

  6. 已有的实现和对比: 大多数主流的web服务器和浏览器都支持304状态码,如Apache、Nginx、IIS等。与传统的200状态码相比,304状态码能更有效地利用缓存,减少不必要的网络请求和降低服务器资源负担。

要验证服务器是否正确处理304状态码,可以打开浏览器的开发者工具中切换到 Network(网络)选项卡,查看指定的网络请求,在第一次请求之后的请求,是否显示 304 Not Modified ,然后其 Size 和Time 是否较少。如是,就说明在请求时,是使用了浏览器自身的缓存而不是重新从服务器下载资源。

Share

上周生病了之后,就没及时打卡这个活动了,整个人都晕晕的。只能这周补上了,加上RMPW活动,应该是要四篇,但也只能慢慢补了。