You are given an integer array nums
consisting of n
elements, and an integer k.
Find a contiguous subarray whose length is equal to k
that has the maximum average value and return this value. Any answer with a calculation error less than 10^-5 will be accepted.
Example 1:
Input: nums = [1,12,-5,-6,50,3], k = 4
Output: 12.75000
Explanation:
Maximum average is (12 - 5 - 6 + 50) / 4 = 51 / 4 = 12.75
Example 2:
Input: nums = [5], k = 1
Output: 5.00000
Constraints:
n == nums.length
1 <= k <= n <= 105
-104 <= nums[i] <= 104
Thought
- 简单题,简言之。
- 每四个数组元素相加,取最大值除以 k
- 专业一点的说法还是去看下官方题解!
AC
/*
* @lc app=leetcode.cn id=643 lang=cpp
*
* [643] 子数组最大平均数 I
*/
// @lc code=start
class Solution {
public:
double findMaxAverage(vector<int>& nums, int k) {
int sum = 0;
int n = nums.size();
for(int i = 0; i < k; i++)
{
sum += nums[i];
}
int maxSum = sum;
for(int i = k; i < n; i++)
{
sum = sum - nums[i - k] + nums[i];
maxSum = max(sum, maxSum);
}
return static_cast<double>(maxSum) / k;
}
};
// @lc code=end
此种做法被称为“ 滑动窗口 ”,还挺形象的^ . ^
介绍下 static_cast
的用法
在C++
中,static_cast
是一种类型转换操作符,用于在编译时进行类型转换。它可以用于以下类型转换:
- 将一个表达式转换为较大或更小的整数类型。
例如,将int
类型转换为short
类型:
int x = 100;
short y = static_cast<short>(x);
- 将一个指针转换为另一种指针类型。
例如,将一个void
类型的指针转换为char
类型的指针:
void* ptr = nullptr;
char* char_ptr = static_cast<char*>(ptr);
- 将一个对象的指针或引用转换为其基类的指针或引用(向上转型)。
例如,将一个Person
对象的指针转换为Animal
类的指针:
class Animal {};
class Person : public Animal {};
Person* person_ptr = new Person;
Animal* animal_ptr = static_cast<Animal*>(person_ptr);
需要注意的是,static_cast
不能用于动态类型转换。要在运行时进行类型转换,应该使用dynamic_cast
。