LT 183 wood cut
Posted 热带雨林
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LT 183 wood cut相关的知识,希望对你有一定的参考价值。
/*
Given n pieces of wood with length L[i] (integer array). Cut them into small pieces to guarantee you could have equal or more than k pieces with the same length. What is the longest length you can get from the n pieces of wood? Given L & k, return the maximum length of the small pieces.
Example
Example 1
Input:
L = [232, 124, 456]
k = 7
Output: 114
Explanation: We can cut it into 7 pieces if any piece is 114cm long, however we can\'t cut it into 7 pieces if any piece is 115cm long.
Example 2
Input:
L = [1, 2, 3]
k = 7
Output: 0
Explanation: It is obvious we can\'t make it.*/
public class Solution { /** *@param L: Given n pieces of wood with length L[i] *@param k: An integer *return: The maximum length of the small pieces. */ public int woodCut(int[] L, int k) { // write your code here if (L == null || L.length == 0 || k <= 0) { return 0; } int start = 1; int end = 1; for (int wood : L) { end = Math.max(wood, end); } while (start + 1 < end) { int mid = start + (end - start) / 2; if (getPieces(L, mid) >= k) { start = mid; } else { end = mid; } } if (getPieces(L, end) >= k) { return end; } if (getPieces(L, start) >= k) { return start; } return 0; } public int getPieces(int[] L, int length) { int count = 0; for (int wood : L) { count += wood / length; } return count; } }
Analysis:
Binary search for the result. The min length is 1, and the max length is the Max(L[i]). So we can try every possible length and calculate how many pieces can we cut? If the number is greater than k, means the the number we tried might be too small. Otherwise, the number is too large. So we can do it via binary search. The total time complexity would be O(nlogAns)
http://buttercola.blogspot.com/2019/03/lintcode-183-wood-cut.html
以上是关于LT 183 wood cut的主要内容,如果未能解决你的问题,请参考以下文章
AtCoder Beginner Contest 217 D - Cutting Woods (set+lower_bound)