【华为OD机试真题 JS】叠积木

题目

  • 积木若干,宽高一致,长不一
  • 用积木叠墙,每层可以放1个或两个积木,最后要保证每层积木总长度相同
  • 若必须用完积木,问叠成的墙最多多少层

输入输出描述

  • 输入:一行由空格分隔的正整数表示积木的长度
  • 输出:一个数字(为墙的最大层数),如果无法按要求叠,则输出-1

思路

  • 找积木总长度与每层长度、层高之间的关系(每层长度*层高=积木总长度)
  • 总长度很好算,层高是我们最终要输出的结果
  • 那每层长度可以算吗?很明显也是有一个区间范围的:
    [积木中最长的,积木中最长的+积木中最短的]

代码


function stackBlock(str) {
    let blockArr = str.split(' ').map(n => parseInt(n)).sort((a, b) => {return a - b});
    let minLen = blockArr[blockArr.length -1];
    let maxLen = blockArr[blockArr.length -1] +blockArr[0];
    let sumBlockLen = 0;
    let maybeLevelArr = [];
    blockArr.forEach(ele => {
        sumBlockLen += ele;
    });

    for (let j = minLen; j < maxLen; j++) {
        if (sumBlockLen % j === 0) {
            maybeLevelArr.push(sumBlockLen / j);
        }
    }
    console.log(maybeLevelArr.sort()[maybeLevelArr.length - 1]);
}

stackBlock('4 2 6 4 2')

运用到的知识点技巧

没啥技巧,仔细读题

你可能感兴趣的:(刷算法题,javascript,开发语言,算法)