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;
}
}

  

最新文章

  1. 第一章 初识MVC4
  2. OpenCV入门学习笔记
  3. [转]在.Net中使用Oracle的表类型和对象类型
  4. Automotive Security的一些资料和心得(4):Automotive Safeguards
  5. HDU-1019 Least Common Multiple
  6. Android学习笔记(九)一个例子弄清Service与Activity通信
  7. Cstring类
  8. GSAP学习笔记
  9. 有关sort函数的用法
  10. 使用C#开发ActiveX控件
  11. mybatis 详解(九)------ 一级缓存、二级缓存
  12. Android studio打开项目一直卡住
  13. 非阻塞IO服务器模型
  14. js隐藏字符串中间部分
  15. Flask 系列之 Pagination
  16. django框架中的全文检索Haystack
  17. python制作模块
  18. Classification with DeepLearning
  19. HTTP 基础
  20. 2018.10.26 bzoj2721: [Violet 5]樱花(数论)

热门文章

  1. [转帖]EPOLL和IOCP比较
  2. github.com连接超时
  3. Linux基础-10-网络原理和基础设置
  4. 理解atoi()函数
  5. Scala 面向对象编程之Trait
  6. netty--处理器
  7. 软键盘 显示隐藏 测量高度 MD
  8. 1.VBA Excel宏
  9. 在论坛中出现的比较难的sql问题:39(动态行转列 动态日期列问题)
  10. .net core 杂记:用Autofac替换内置容器