LeetCode643. 子数组最大平均数 I

给定 n 个整数,找出平均数最大且长度为 k 的连续子数组,并输出该最大平均数。

示例 1:

输入: [1,12,-5,-6,50,3], k = 4
输出: 12.75
解释: 最大平均数 (12-5-6+50)/4 = 51/4 = 12.75

注意:

  1. 1 <= k <= n <= 30,000。
  2. 所给数据范围 [-10,000,10,000]。

思路:求连续子数组最大平均数,就等同于求连续子数组最大和;因此,找到和最大的连续子数组即可。使用双指针,startIndex指向数组头元素,endIndex指向从数组0索引开始到第k个元素的位置。每次更新startIndex,endIndex即可得到下一段连续子数组和。

class Solution {
    public double findMaxAverage(int[] nums, int k) {
         double ave=0;      //用来保存最大平均值
		 double lastAve=0;    //用来保存上一次的平均值
		 int startIndex=0;  //起始索引
		 int endIndex=0;  //结束索引
        
        //计算第一段连续的和
		 for(startIndex=0;startIndex<k;startIndex++) {
			 lastAve+=nums[startIndex];
		 }
        ave=lastAve;
        
        //双指针,当前所求的tempAve等于上一段连续和(lastAve)+上一段连续数的尾数后继结点-上一段连续数的头结点
		 for(startIndex=0,endIndex=k;endIndex<nums.length;startIndex++,endIndex++) {
			 double tempAve=lastAve+nums[endIndex]-nums[startIndex];
			 lastAve=tempAve;
			 if(tempAve>ave) {
				 ave=tempAve;
			 }
		 }
		 
		 return ave/k;
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_40550726/article/details/80890538