LeetCode 2090. 半径为 k 的子数组平均值(滑窗)
文章目錄
- 1. 題目
- 2. 解題
1. 題目
給你一個下標從 0 開始的數組 nums ,數組中有 n 個整數,另給你一個整數 k 。
半徑為 k 的子數組平均值 是指:nums 中一個以下標 i 為 中心 且 半徑 為 k 的子數組中所有元素的平均值,即下標在 i - k 和 i + k 范圍(含 i - k 和 i + k)內所有元素的平均值。
如果在下標 i 前或后不足 k 個元素,那么 半徑為 k 的子數組平均值 是 -1 。
構建并返回一個長度為 n 的數組 avgs ,其中 avgs[i] 是以下標 i 為中心的子數組的 半徑為 k 的子數組平均值 。
x 個元素的 平均值 是 x 個元素相加之和除以 x ,此時使用截斷式 整數除法 ,即需要去掉結果的小數部分。
例如,四個元素 2、3、1 和 5 的平均值是 (2 + 3 + 1 + 5) / 4 = 11 / 4 = 3.75,截斷后得到 3 。
示例 1:
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/k-radius-subarray-averages
著作權歸領扣網絡所有。商業(yè)轉載請聯(lián)系官方授權,非商業(yè)轉載請注明出處。
2. 解題
class Solution { public:vector<int> getAverages(vector<int>& nums, int k) {long long n = nums.size(), sum = 0, idx = k;vector<int> avg(n, -1);for(int i = 0; i < min(2LL*k, n); ++i)sum += nums[i]; // 前2k個數字的和for(int i = 2*k; i < n; ++i){sum += nums[i];//加上進入窗口的avg[idx++] = sum/(2*k+1);sum -= nums[i-2*k];//左端要退出窗口的,減去}return avg;} };156 ms 126.5 MB C++
我的CSDN博客地址 https://michael.blog.csdn.net/
長按或掃碼關注我的公眾號(Michael阿明),一起加油、一起學習進步!
總結
以上是生活随笔為你收集整理的LeetCode 2090. 半径为 k 的子数组平均值(滑窗)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode 1759. 统计同构子
- 下一篇: LeetCode 1851. 包含每个查