首页 > 其他分享 >【力扣刷题】2090.半径为k的子数组平均值(定长滑动窗口)

【力扣刷题】2090.半径为k的子数组平均值(定长滑动窗口)

时间:2024-09-20 12:50:00浏览次数:3  
标签:下标 nums 元素 力扣 100000 2090 数组 avg 刷题

题目:

给你一个下标从 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 ,此时使用截断式 整数除法 ,即需要去掉结果的小数部分。

  • 例如,四个元素 231 和 5 的平均值是 (2 + 3 + 1 + 5) / 4 = 11 / 4 = 2.75,截断后得到 2 。

示例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

思路:

1、确定存有半径的中心点下标及其下标范围。

2、运用滑动窗口思路解题

代码:

class Solution {
public:
    vector<int> getAverages(vector<int>& nums, int k) {
        ios::sync_with_stdio(false);
        long long n=nums.size();
        vector<int>v(n,-1); //v长度为n,初始值为-1
        long long sum=0;
        for(int i=0;i<n;i++)
        {
//进入窗口
            sum+=nums[i];
            if(i<2*k) continue; 
//存有半径的中心点范围:i>=2*k&&i-k<n-k
            else if(i-k<n-k)
            {
                auto a=i-k; //中心点下标
                v[a]=sum/(2*k+1); //
            }
//出窗口
            sum-=nums[i-2*k];                                            
        }
        return v;        
    }
};

 

标签:下标,nums,元素,力扣,100000,2090,数组,avg,刷题
From: https://blog.csdn.net/m0_67763367/article/details/142381943

相关文章

  • 【力扣刷题】1232.缀点成线
    题目:给定一个数组 coordinates ,其中 coordinates[i]=[x,y] , [x,y] 表示横坐标为 x、纵坐标为 y 的点。请你来判断,这些点是否在该坐标系中属于同一条直线上。示例1:输入:coordinates=[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7]]输出:true示例2: 输入:coordina......
  • 代码随想录算法训练营第十六天 | Javascript | 力扣Leetcode | 回溯 | 77. 组合、216.
    目录前言简介题目链接:77.组合题目链接:216.组合总和3题目链接:17.电话号码的字母组合前言踏平坎坷成大道,斗罢艰险又出发!自律的尽头是自控,自控的尽头是硬控。愿道友们披荆斩棘,终能得偿所愿。简介本人是小几年经验的前端开发,算法基础只有力扣几十道题,非常薄......
  • 代码随想录算法训练营第十五天 | Javascript | 继续二叉树的一天 | 力扣Leetcode | 补
    目录前言简介题目链接:501.二叉搜索树中的众数题目链接:236.二叉树的最近公共祖先题目链接:235.二叉搜索树的最近公共祖先前言踏平坎坷成大道,斗罢艰险又出发!自律的尽头是自控,自控的尽头是硬控。愿道友们披荆斩棘,终能得偿所愿。简介本人是小几年经验的前端开发,......
  • 代码随想录刷题day13 | LeetCode 110.平衡二叉树 257. 二叉树的所有路径 404.左叶子之
    110.平衡二叉树力扣题目链接后序遍历求高度,高度判断是否平衡|LeetCode:110.平衡二叉树1.三元运算符:(?:)condition?expression_if_true:expression_if_false;前面是条件,如果符合就等于冒号前的expression_if_true,反之则是后面的。2.如果要使用if(!node->left),要......
  • 力扣42 接雨水 Java版本
    文章目录题目描述代码1题目描述给定n个非负整数表示每个宽度为1的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。示例1:输入:height=[0,1,0,2,1,0,1,3,2,1,2,1]输出:6解释:上面是由数组[0,1,0,2,1,0,1,3,2,1,2,1]表示的高度图,在这种情况下,可以接......
  • 一职刷题-功能列表
    一职刷题-功能列表1.1学生系统功能模块介绍登录用户名、密码注册年级、用户名、密码任务中心管理员发布的年级任务,每个学生只能做一次考试题干支持文本、图片、数学公式、表格等,学生答题支持:文本固定试卷可重复练习、自行批改的试卷时段试卷在时......
  • 【oj刷题】二分查找篇:二分查找算法的原理和应用场景
    前言:二分查找算法,又称折半查找算法,是一种在有序数组中查找特定元素的高效查找方法。它通过将搜索区间不断缩小一半,从而在对数时间内找到目标元素。二分查找是基于分治策略的一种典型应用,能够高效的处理许多问题,下面我们就来看一下二分查找算法的原理和应用场景目录一、什......
  • 【每日刷题】Day124
    【每日刷题】Day124......
  • 记录刷题日常
    1.今天解决了一个图论问题,一个二分问题.在图论问题中使用到最短路算法,但是实际上使用的是最短路的知识,使用二分进行查找然后维护长度实现计算大于x的路线是否存在.includeincludeincludeincludeincludeconstintN=1200;usingnamespacestd;typedefpair<int,int>PII;......
  • 【每日刷题】Day125
    【每日刷题】Day125......