一天一大 leet(跳水板)难度:简单-Day20200708

一天一大 leet(跳水板)难度:简单-Day20200708_第1张图片

题目:

你正在使用一堆木板建造跳水板。有两种类型的木板,其中长度较短的木板长度为 shorter,长度较长的木板长度为 longer。你必须正好使用 k 块木板。
编写一个方法,生成跳水板所有可能的长度。
返回的长度需要从小到大排列。

示例

输入:
shorter = 1
longer = 2
k = 3
输出: {3,4,5,6}

提示

  • 0 < shorter <= longer
  • 0 <= k <= 100000

抛砖引玉

一天一大 leet(跳水板)难度:简单-Day20200708_第2张图片

这道题有点秀逗了,都不太相信逻辑就那么简单,抱着试试看到心态提交下居然还过了,-_-||

k 递增(i),长度=较长 Xi+较短 X(k-i)

/**
 * @param {number} shorter
 * @param {number} longer
 * @param {number} k
 * @return {number[]}
 */
var divingBoard = function (shorter, longer, k) {
  let _result = []
  for (let i = 0; i <= k; i++) {
    let long = longer * i + (k - i) * shorter
    if (long && !_result.includes(long)) {
      _result.push(long)
    }
  }
  return _result
}

用时成功击败了 9.21% -_-||

优化下:

特殊情况

  • k 等于 0 返回 []
  • shorter 等于 longer 返回[k*shorter]
/**
 * @param {number} shorter
 * @param {number} longer
 * @param {number} k
 * @return {number[]}
 */
var divingBoard = function (shorter, longer, k) {
  let _result = []
  if (k === 0) return _result
  if (shorter === longer) return [shorter * k]
  for (let i = 0; i <= k; i++) {
    let long = longer * i + (k - i) * shorter
    if (long && !_result.includes(long)) {
      _result.push(long)
    }
  }
  return _result
}

得,用时成了 7.02% 可怕

再检查下,includes 这部分之前是判断重复的,那换成去重方式再试下:
只要与最后一位不同就说明不重复

/**
 * @param {number} shorter
 * @param {number} longer
 * @param {number} k
 * @return {number[]}
 */
var divingBoard = function (shorter, longer, k) {
  let _result = []
  if (k === 0) return _result
  if (shorter === longer) return [shorter * k]
  for (let i = 0; i <= k; i++) {
    let long = longer * i + (k - i) * shorter
    if (long && _result[_result.length - 1] !== long) {
      _result.push(long)
    }
  }
  return _result
}

66.67%,就这吧,还要啥自行车,话又说回来,今天的每天一题确实有点…简陋

博客: 小书童博客

公号: 坑人的小书童

坑人的小书童

你可能感兴趣的:(一天一大leet)