clamp/Lodash/“窗口滑动”

章述:我,一个程序员的“白日梦”,一行代码解决一个需求;
吐槽:代码逻辑繁琐,脑细胞支撑不了

CSS(clamp)

undefined

场景:可能有一天你会想用一个css属性搭建一个自适应的项目(可能性还是比较小的。。。。但是确实存在实现该需求的东东)

使用 clamp() CSS函数,我们可以创建仅具有一个属性的响应式网站。

用法:
clamp(minimum, preferred, maximum);
三个属性:(属性值的类型不确定:px/%/vw/rem……等等)
minimum 最小值:例如 16px
flexible 弹性值/首选值:例如 5vw
maximum 最大值:例如 34px

h1 {
font-size: clamp(16px, 5vw, 34px);
}
在此示例中,仅当该值大于 16px 且小于 34px 时,h1 字体大小值将为视口宽度的 5%。

简单举例:
例如,如果你的视口宽度是 300px,你的 5vw 值将等于 15px,但是,你将该字体大小值限制为最小 16px,因此这就是将要发生的情况。
另一方面,如果你的视口宽度为 1400px,则 5vw 将高达 70px!但幸运的是,你将该最大值限制为 34px,因此它不会超过该值。

一句话:比小取小,比大取大

Lodash
社区链接:https://luatdoc.papapoi.com/1730/
官网链接:https://www.lodashjs.com/

”窗口滑动类“
滑动窗口主要思路是维护一对指针,在一定条件内右移右指针扩大窗口大小直到窗口内的解不满足题意,此时我们需要根据情况移动左指针,重复移动左右指针的操作并在区间内求解,直到双指针不能再移动。
d:寻无重复最长子串长度

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
var lengthOfLongestSubstring = function(s) {
// 用于存储指针移动过程中的值
let map = {}
// 双指针
let left = 0
let right = 0
// 结果
let count = 0
// 指针移动终止条件
while (right < s.length) {
const char = s[right]
// 根据题意我们需要寻找不重复的最长子串
// 当 char 出现时我们需要移动左指针到重复字符的下一位
if (char in map) {
left = Math.max(left, map[char] + 1)
}
// 求解
count = Math.max(count, right - left + 1)
// 移动右指针并存下索引
map[char] = right++
}
return count
};

通用解法

1
2
3
4
5
6
7
8
9
10
11
let left = 0
let right = 0
while (right < size) {
获取当前索引数据
right++
更新操作
while (窗口需要缩小) {
left++
移除操作
}
}

右指针右移后数据的更新
判断窗口何时需要缩小
左指针右移后数据的更新
根据题目求最优解

上次更新 2021-01-28