手写算法: 盛最多水的容器

11. 盛最多水的容器open in new window

思路

分析题意,其实就是为了求最大面积,所以可以拿个变量存储最大面积,与当前面积相比,更新最大面积。

此题可以用双指针来解决,面积取决于最短的那根 * 左右指针的距离。

/**
 * @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()

125. 实现 classNames()open in new window

/**
 * @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]]]]);
Last Updated:
Contributors: kk