思路:
1.得到数组的前缀和;
2.然后求得相差为4的两个前缀和的差,即为该长度为4的子序列的和;
3.最后比较sum 和 nums[k]的大小,得到较大的(因为在2中的寻找最大sum的时候并没有比较与nums[k]和nums[0]之间的和)
4.最后返回sum / k即可;
class Solution { public: double findMaxAverage(vectorAC截图: 本题解仅作为个人复习查看使用,并无他用。& nums, int k) { //使用简单的最大平均数相当于总和最大 int n = nums.size(); if(n == 1){ return nums[0]; } double sum = INT_MIN; //记录前缀和 for(int i = 1;i < n;i++){ nums[i] = nums[i] + nums[i - 1]; } //然后求得长度为4的连续子序列的最大和 for(int i = k;i < n;i++){ if(sum < nums[i] - nums[i - k]) sum = nums[i] - nums[i - k]; } if(sum < nums[k - 1]) sum = nums[k - 1]; return sum / k; } };
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)