题目
思路
典型的二分,我们可以知道如果mid天能够得到m组k束花,那么比mid大的所有天数都是可以的,我们现在就要看能否在更少的天数获得m*k朵花。
代码
//2.二分法public int minDays(int[] bloomDay, int m, int k) {int len = bloomDay.length, size = m * k;if (len < size) return -1;int max = Integer.MIN_VALUE, min = Integer.MAX_VALUE;for (int day : bloomDay) {min = Math.min(min, day);max = Math.max(max, day);}while (min < max) {int mid = (min + max) / 2;int count = getCount(bloomDay, k, mid);if (count >= m) {max = mid;} else {min = mid + 1;}}return min;}//统计在不同天数下,连续能满足的情况public int getCount(int[] bloomDay, int k, int mid) {int count = 0, res = 0;for (int day : bloomDay) {count = day <= mid ? count + 1 : 0;if (count == k) {count = 0;res++;}}return res;
