題目大概描述:有一段木塊長為n,每一塊高為hi,現(xiàn)在想將此木塊分為m塊,求得他們最小高度之和例:輸入 n=8 m=3 height={1,2,3,4,5,6,7,8} 輸出 minheight = 11我后面去要了答案,給的是這個:將木板分成(1, 2, 3), (4, 5), (6, 7, 8)三塊,高度之和最小為11。思路:這個問題可以使用二分查找和貪心算法來解決。首先可以找到最大和最小的高度,將它們設(shè)為left和right,然后二分查找出一個mid值,然后貪心地將木板切成m塊,每塊長度為mid,計算出所有小塊的高度之和,將其與mid進行比較,如果小于等于mid,則將mid更新為right,否則將mid更新為left。重復(fù)上述過程,直到left和right相等,此時的值即為塊的高度之和的最小值。代碼實現(xiàn):public int minTotalHeight(int n, int m, int[] heights) { int left = 1, right = 0; for (int h : heights) { right = Math.max(right, h); } while (left < right) { int mid = (left + right) / 2; int count = 0, sum = 0; for (int h : heights) { sum += h; if (sum > mid) { count++; sum = h; } } count++; if (count <= m) { right = mid; } else { left = mid + 1; } } return left;}就感覺跟我理解的題目又完全不一樣了,因為種種原因不敢去再細問,所以先來這邊看能不能尋求答案