原木加工
有一些原木,現在想把這些木頭切割成一些長度相同的小段木頭,需要得到的小段的數目至少為?k。當然,我們希望得到的小段越長越好,你需要計算能夠得到的小段木頭的最大長度。
?注意事項
木頭長度的單位是厘米。原木的長度都是正整數,我們要求切割得到的小段木頭的長度也要求是整數。無法切出要求至少?k?段的,則返回?0?即可。
class Solution { public:/** @param L: Given n pieces of wood with length L[i]* @param k: An integer* @return: The maximum length of the small pieces*/int woodCut(vector<int> &L, int k) {// write your code hereif (L.size() == 0) {return 0;}// always keep in mind that overbufferlong long sum = L[0];int max = L[0];for (int i = 1; i < L.size(); i++) {sum += L[i];if (max < L[i]) {max = L[i];}}if (k > sum) {return 0;}int min = 1;while (min < max) {int mid = min + (max - min) / 2;int count = 0;for (int i = 0; i < L.size(); i++) {// mid is the expected number, not kcount += (L[i] / mid);}if (count >= k) {min = mid + 1;} else {max = mid;}}return min - 1;} };
總結
- 上一篇: 智多星大数据分析云平台实践
- 下一篇: 十分详细的diff算法原理解析