手写算法: 盛最多水的容器
思路
分析题意,其实就是为了求最大面积,所以可以拿个变量存储最大面积,与当前面积相比,更新最大面积。
此题可以用双指针来解决,面积取决于最短的那根 * 左右指针的距离。
/**
* @param {number[]} arr
* @return {number}
*/
var maxArea = function (arr) {
const len = arr.length;
let result = 0;
let left = 0,
right = len - 1;
while (left < right) {
let area = Math.min(arr[left], arr[right]) * (right - left);
result = Math.max(result, area);
if (arr[left] < arr[right]) {
left++;
} else {
right--;
}
}
return result;
};
手写题: 实现 classNames()
/**
* @param {any[]} args
* @returns {string}
*/
function classNames(...args) {
return args
.flat(Infinity)
.reduce((obj, item) => {
if (typeof item === 'string' || typeof item === 'number') {
obj.push(item);
}
if (!!item && typeof item === 'object') {
obj.push(...getClassName(item));
}
return obj;
}, [])
.join(' ');
}
function getClassName(obj) {
const className = [];
for (const key in obj) {
if (obj.hasOwnProperty(key) && !!obj[key]) {
className.push(key);
}
}
return className;
}
const obj = new Map();
obj.cool = '!';
classNames(['BFE', [{ dev: true }, ['is', [obj]]]]);