题目来源
644. 子数组最大平均数 II - 力扣(LeetCode)
本题还是比较难,在leetcode中也是hard级别。
本题最简单的解题思路是,暴力枚举出nums的所有长度大于等于k的连续子序列,然后分别求解这些连续子序列的平均数,返回最大的。
这里,我们可以用双重for循环来枚举出所有长度大于等于k的连续子序列,外层是连续子序列的左侧起点,内层是连续子序列的右侧终点,但是这个时间复杂度是O(n^2),对于 1 ≤ n ≤ 10000 的数量级来说,是肯定会超时的。
因此上面思路不可取。
本题目前最优的解法如下:
第一步、通过二分法,找出所求子序列的可能的平均值。
这里,为什么要用二分法呢?
举个例子,有一个数组[1,2,3],请思考:
- 它的平均值会大于3吗?
- 它的平均值会小于1吗?
答案很显然,都不会