百度-好数组-ceil-floor的区别

百度笔试-好数组问题解法及ceil/floor函数区别

#resource / algorithm #type / snippet #status / growing #source / company / baidu

[!info] related notes 算法面试题型 MOC

百度-好数组-ceil-floor的区别

题目

我刚刚在笔试的时候遇到了一个问题,算法题的题目是: 当数组中所有数据的最大值不超过最小值的2倍时,就称它是一个好数组。 然后可以做一个操作,就是把一个数拆分成两个数,比如说一个数字五可以把它拆分成2加3。然后可以进行这种操作,然后给你一个数组,问你他需要进行最少几次操作,变成一个好数组。

题解

我想的话这个方法就是先变立数组,找到它的最小值,然后再算出目标值,就是最小值乘2。然后在遍历数组中每个值。然后当他大于这个数字时,就计算他除以这个目标值的floor,即小于他的最大整数。我觉得这个应该就是最小的。但是测试用例时我却错了,你觉得这个应该是怎么做的?

方向对了,但是细节不对



function b(arr) {
    const minNum = Math.min(...arr)
    const range = 2 * minNum
    let ans = 0;
    for (const n of arr) {
        if (n > range) {

            ans += checkTimes(range, n);
        }
    }
    console.log(ans)
}

function checkTimes(target, parm) {
    let times = Math.floor(parm/target);
    console.log(times)
    
    return times;
}

let test1 = [3, 6, 13]

// b(test1)
checkTimes(6,13)

真正的操作次数应该是“段数减 1”:Math.ceil(n / target) - 1 Math.floor(parm / target) 还是不行:它算的是“至少需要多少个完整的 target 容量”而不是要把这个数拆成多少段。

创建于 2025/1/1 更新于 2026/5/27