给定数组,每个元素代表一个木头的长度,木头可以任意截断, 从这堆木头中截出至少k个相同长度为m的木块,已知k,求max(m)

tech2025-04-24  10

给定数组,每个元素代表一个木头的长度,木头可以任意截断, 从这堆木头中截出至少k个相同长度为m的木块,已知k,求max(m)

[9, 4, 3, 10, 7] k = 5 max(m) = ? public int maxM(int[] nums, int k) { int min = Integer.MAX_VALUE; int max = Integer.MIN_VALUE; for (int i = 0; i < nums.length; i++) { min = Math.min(nums[i], min); max = Math.max(nums[i], max); } int lo = min, hi = max; int ans = -1; while (lo <= hi) { int mid = lo + (hi - lo) / 2; if (isFit(nums, k, mid)) { ans = mid; lo = mid + 1; } else hi = mid - 1; } return ans; } private boolean isFit(int[] nums, int k, int mid) { int count = 0; for (int i = 0; i < nums.length; i++) { count += nums[i] / mid; } return count >= k; }
最新回复(0)