Maximum Average Subarray II
2024-08-27 10:19:21
Description
Given an array with positive and negative numbers, find the maximum average subarray
which length should be greater or equal to given length k
.
It's guaranteed that the size of the array is greater or equal to k.
Example
Example 1:
Input:
[1,12,-5,-6,50,3]
3
Output:
15.667
Explanation:
(-6 + 50 + 3) / 3 = 15.667
Example 2:
Input:
[5]
1
Output:
5.000
思路:二分答案
二分出 average 之后,把数组中的每个数都减去 average,然后的任务就是去求这个数组中,是否有长度 >= k 的 subarray,他的和超过 0。
这一步用类似 Maximum Subarray 的解法来做就好了
public class Solution {
/**
* @param nums: an array with positive and negative numbers
* @param k: an integer
* @return: the maximum average
*/ private boolean canFind(int[] nums, int k, double avg) {
double rightSum = 0, leftSum = 0, minLeftSum = 0;
for (int i = 0; i < k; i++) {
rightSum += nums[i] - avg;
} for (int i = k; i <= nums.length; i++) {
if (rightSum - minLeftSum >= 0) {
return true;
}
if (i < nums.length) {
rightSum += nums[i] - avg;
leftSum += nums[i - k] - avg;
minLeftSum = Math.min(minLeftSum, leftSum);
}
}
return false;
}
public double maxAverage(int[] nums, int k) {
double start, end, mid;
start = end = nums[0];
for (int i = 0; i < nums.length; i++) {
start = Math.min(nums[i], start);
end = Math.max(nums[i], end);
}
while (start + 1e-5 < end) {
mid = (start + end) / 2;
if (canFind(nums, k, mid)) {
start = mid;
} else {
end = mid;
}
}
return start;
}
}
最新文章
- 第一章 初识MVC4
- OpenCV入门学习笔记
- [转]在.Net中使用Oracle的表类型和对象类型
- Automotive Security的一些资料和心得(4):Automotive Safeguards
- HDU-1019 Least Common Multiple
- Android学习笔记(九)一个例子弄清Service与Activity通信
- Cstring类
- GSAP学习笔记
- 有关sort函数的用法
- 使用C#开发ActiveX控件
- mybatis 详解(九)------ 一级缓存、二级缓存
- Android studio打开项目一直卡住
- 非阻塞IO服务器模型
- js隐藏字符串中间部分
- Flask 系列之 Pagination
- django框架中的全文检索Haystack
- python制作模块
- Classification with DeepLearning
- HTTP 基础
- 2018.10.26 bzoj2721: [Violet 5]樱花(数论)