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:
输入:nums = [7,4,3,9,1,8,5,2,6], k = 3
输出:[-1,-1,-1,5,4,4,-1,-1,-1]
解释:
- avg[0]、avg[1] 和 avg[2] 是 -1 ,因为在这几个下标前的元素数量都不足 k 个。
- 中心为下标 3 且半径为 3 的子数组的元素总和是:7 + 4 + 3 + 9 + 1 + 8 + 5 = 37 。使用截断式 整数除法,avg[3] = 37 / 7 = 5 。
- 中心为下标 4 的子数组,avg[4] = (4 + 3 + 9 + 1 + 8 + 5 + 2) / 7 = 4 。
- 中心为下标 5 的子数组,avg[5] = (3 + 9 + 1 + 8 + 5 + 2 + 6) / 7 = 4 。
- avg[6]、avg[7] 和 avg[8] 是 -1 ,因为在这几个下标后的元素数量都不足 k 个。示例 2:
输入:nums = [100000], k = 0
输出:[100000]
解释:
- 中心为下标 0 且半径 0 的子数组的元素总和是:100000 。avg[0] = 100000 / 1 = 100000 。示例 3:
输入:nums = [8], k = 100000
输出:[-1]
解释:
- avg[0] 是 -1 ,因为在下标 0 前后的元素数量均不足 k 。 提示:
n == nums.length
1 <= n <= 10^5
0 <= nums[i], k <= 10^5
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/k-radius-subarray-averages
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
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 的子数组平均值(滑窗)相关推荐
- 力扣 2090. 半径为 k 的子数组平均值
题目 给你一个下标从 0 开始的数组 nums ,数组中有 n 个整数,另给你一个整数 k . 半径为 k 的子数组平均值 是指:nums 中一个以下标 i 为 中心 且 半径 为 k 的子数组中所有 ...
- 5939. 半径为 k 的子数组平均值
5939. 半径为 k 的子数组平均值 给你一个下标从 0 开始的数组 nums ,数组中有 n 个整数,另给你一个整数 k . 半径为 k 的子数组平均值 是指:nums 中一个以下标 i 为 中心 ...
- LeetCode 713. 乘积小于K的子数组(滑动窗口)
1. 题目 给定一个正整数数组 nums. 找出该数组内乘积小于 k 的连续的子数组的个数. 示例 1: 输入: nums = [10,5,2,6], k = 100 输出: 8 解释: 8个乘积小于 ...
- LeetCode 560. 和为K的子数组(前缀和差分)
1. 题目 给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数. 示例 1 : 输入:nums = [1,1,1], k = 2 输出: 2 , [1,1] 与 [1,1 ...
- 11. Leetcode 713. 乘积小于K的子数组 (数组-同向双指针-滑动窗口)
给定一个正整数数组 nums和整数 k .请找出该数组内乘积小于 k 的连续的子数组的个数.示例 1:输入: nums = [10,5,2,6], k = 100 输出: 8 解释: 8个乘积小于10 ...
- 力扣刷题笔记:1438. 绝对差不超过限制的最长连续子数组(滑窗模板题,选择有序列表SortedList()数据类型就不会超时)
题目: 1438.绝对差不超过限制的最长连续子数组 给你一个整数数组 nums ,和一个表示限制的整数 limit,请你返回最长连续子数组的长度,该子数组中的任意两个元素之间的绝对差必须小于或者等于 ...
- LeetCode 930. 和相同的二元子数组(哈希+前缀和)
文章目录 1. 题目 2. 解题 1. 题目 在由若干 0 和 1 组成的数组 A 中,有多少个和为 S 的非空子数组. 示例: 输入:A = [1,0,1,0,1], S = 2 输出:4 解释: ...
- 2022-6-13 咒语和药水的成功对数,替换字符后匹配,统计得分小于 K 的子数组数目,......
1. 咒语和药水的成功对数 You are given two positive integer arrays spells and potions, of length n and m respec ...
- [Leedcode][JAVA][第560题][和为K的子数组][Hashmap][数组]
[问题描述][第560题][和为K的子数组][中等] 给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数.示例 1 :输入:nums = [1,1,1], k = 2 输 ...
最新文章
- android录制视频横向,Android从零开始(26)(设置全屏+横屏、相机拍照、视频录制)(新)...
- day 01 python爬虫原理
- VTK:PolyData之TriangleColoredPoints
- wuxiu.SqlHelper 2.0 源码下载
- 论文浅尝 - EMNLP2020 | 通过词重排序跨语言解析
- Spring(4)--- hello world实例
- linux下配置SVN搭建 centos svn安装配置
- jqgrid点击搜索无法重置参数问题
- oracle wmsys.wm_concat函数
- golang 格式“占位符”%d,%f,%s等应用类型
- 采用泰克示波器TBS2000和TCP0030A电流探头准确评估高速DCDC转换器电感的选择
- 盘点关于程序员的那些经典案例
- 用产品思维设计API(二)——数据解耦,才是前后分离的本质
- 纯洁的心--佩雷尔曼
- 【免费办公软件】万彩办公大师教程丨文件批量解压工具
- 小单刷题笔记之鲁卡斯队列(浮点数比较)
- 如何使用计算机管理员账户,Win7系统怎么开启Administrator管理员账号及权限?
- 如何判断微信/判断支付宝退款超期
- 数据仓库面试总结大全,深度解析底层逻辑
- SIM800C 透传模式与非透传模式测试对比