标签:10 12 nums Average 643 let sum Subarray maxSum
Given an array consisting of n
integers, find the contiguous subarray of given length 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: Maximum average is (12-5-6+50)/4 = 51/4 = 12.75
Note:
- 1 <=
k
<=n
<= 30,000. - Elements of the given array will be in the range [-10,000, 10,000].
子数组最大平均数 I。
给定 n
个整数,找出平均数最大且长度为 k
的连续子数组,并输出该最大平均数。
这道题的思路是滑动窗口,但是做法有点区别,不涉及two pointer。这道题比一般的滑动窗口题更简单,因为这道题的窗口长度是固定的K。所以我们先计算一下数组前K个数的和;然后从第 k + 1 个数开始,分别计算不同窗口里面数字的sum,并且记录一个最大的sum。最后再计算平均值。
时间O(n)
空间O(1)
Java实现
1 class Solution { 2 public double findMaxAverage(int[] nums, int k) { 3 long sum = 0; 4 for (int i = 0; i < k; i++) { 5 sum += nums[i]; 6 } 7 8 long maxSum = sum; 9 for (int i = k; i < nums.length; i++) { 10 sum = sum - nums[i - k] + nums[i]; 11 maxSum = Math.max(maxSum, sum); 12 } 13 return 1.0 * maxSum / k; 14 } 15 }
JavaScript实现
1 /** 2 * @param {number[]} nums 3 * @param {number} k 4 * @return {number} 5 */ 6 var findMaxAverage = function(nums, k) { 7 let sum = 0; 8 for (let i = 0; i < k; i++) { 9 sum += nums[i]; 10 } 11 let maxSum = sum; 12 for (let i = k; i < nums.length; i++) { 13 sum = sum - nums[i - k] + nums[i]; 14 maxSum = Math.max(maxSum, sum); 15 } 16 return 1.0 * maxSum / k; 17 };
标签:10,12,nums,Average,643,let,sum,Subarray,maxSum 来源: https://www.cnblogs.com/cnoodle/p/14375730.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。