js版 // arr为绳长数组, m为需要裁剪成的绳数 var longestRope = function(arr, m) { arr.sort((a, b) => { return a - b }) let lower = 0 let higher = arr[arr.length - 1] while((higher - lower) > 0.001) { let mid = (lower + higher) / 2 if (enough(arr, m, mid)) { lower = mid } else { higher = mid } } return toDecimal(lower, 2) } function enough(arr, m, ropeLength) { let sum = 0 let len = arr.length for(let i = 0; i < len; i ++) { sum += parseInt(arr[i] / ropeLength) if (sum >= m) { return true } } return false } // 保留n位小数,不足补0 function toDecimal(number, n) { number = number.toFixed(n) let index = number.indexOf('.') if (index < 0) { index = s.length number += '.' } while (number.length <= index + n) { number += '0' } return number } // 测试用例 let arr = [3, 4, 5] console.log(longestRope(arr, 4)) // 2.50
点赞 评论

相关推荐

牛客网
牛客企业服务