644. Maximum Average Subarray II
来源:互联网 发布:总统和主席的区别知乎 编辑:程序博客网 时间:2024/06/06 11:41
644 Maximum Average Subarray II
Given an array consisting of n integers, find the contiguous subarray whose length is greater than or equal to k that has the maximum average value. And you need to output the maximum average value.
Example 1:
Input: [1,12,-5,-6,50,3], k = 4
Output: 12.75
Explanation:
when length is 5, maximum average value is 10.8,
when length is 6, maximum average value is 9.16667.
Thus return 12.75.
问题描述:
给出一个无序的数组,找出其中连续的子序列,使得其中的平均值最大,其中规定了子序列的长度必须大于等于k。
输出最大平均值。
思路:
一、先放个图:
先计算到数组前k个数之和。
然后,在计算前k+i个数之和U时候,还需要计算前i个数之和S,并将其中最小值用min记录下来。
那么,前k+i个数中子序列中最大值就是U-min。
·然后……
大神的思路是加上2个double类型的数,初始值为-10000和10000。
此时两个数之和平均值为0。
之后我们会不断调整这两个数的值,直到这两个数与 数组中所求的子序列最大平均值相等才停止。
初始:-10000 和 10000 平均值 0
我们把平均值0传进去,然后看看进入一函数,这个函数就是上面计算 该数组长度大于等于k的子序列最大值 的函数,看看 其中函数运行过程中会不会出现比平均值0大的子序列,如果大了,说明传进去的-10000改为平均值,如果算到数组最后一个数还是不大于,那么就10000改为0.
然后 0和10000 或者 -10000和0 平均值 5000 或 -5000
……
一直循环到 传进去的两数相等(对于double类型是 <0.4e-5)
class Solution {public: double findMaxAverage(vector<int>& nums, int k) { double l=-10000,r=10000,mid; vector<double> b(nums.size()); //min[i]记录前i个数中子序列(0~k,其中k<=i)之和最小的值 while(r-l>0.4e-5) { mid=(l+r)/2; bool u=false; double sum=0.0; double y=0; for(int i=0;i<nums.size();++i) { sum=sum+nums[i]; y = sum -(i+1)*mid; if(i+1>=k && y > (i+1>k? b[i-k] : 0)) { u =true; break; } if(i==0) { b[i]=min(y,0.0); } else { b[i]=min(y,b[i-1]); } } if(u) l=mid; else r=mid; } return (l+r)/2; }};
- 644. Maximum Average Subarray II
- 644. Maximum Average Subarray II
- Leetcode 644. Maximum Average Subarray II 最大平均区间2 解题报告
- [LintCode]Maximum Average Subarray
- Maximum Average Subarray I
- Lintcode 617:Maximum Average Subarray
- 643. Maximum Average Subarray I
- 643. Maximum Average Subarray I
- 643. Maximum Average Subarray I
- 643. Maximum Average Subarray I
- leetcode[Maximum Average Subarray I]
- 643. Maximum Average Subarray I
- 643. Maximum Average Subarray I
- 643. Maximum Average Subarray I
- 643. Maximum Average Subarray I
- 643 Maximum Average Subarray I
- leetCode-Maximum Average Subarray I
- Lintcode - Maximum Subarray II
- 安卓中机型适配问题
- python爬虫--urllib2和urllib区别
- mysql图形化工具使用记录
- 如何在CSDN的侧边栏添加人形时钟和可爱的小仓鼠
- JQuery基础_Ajax
- 644. Maximum Average Subarray II
- 程序员网站收集
- 多个MR一起执行的Driver代码
- SpringMVC批量上传图片,实现上传前图片预览
- 【读书笔记】react全栈 前两章总结大纲
- 向量和矩阵的各种范数比较(1范数、2范数、无穷范数等等)
- 《慕课网玩转算法面试》笔记及习题解答3.5~3.6
- CMD (一)
- Windows打印体系结构之打印驱动框架