当前位置: 首页 > news >正文

【C++刷题】力扣-#643-子数组最大平均数I

题目描述

给你一个由 n 个元素组成的整数数组 nums 和一个整数 k 。
请你找出平均数最大且 长度为 k 的连续子数组,并输出该最大平均数。
任何误差小于 10-5 的答案都将被视为正确答案。

示例

示例 1

输入:nums = [1,12,-5,-6,50,3], k = 4
输出:12.75
解释:最大平均数 (12-5-6+50)/4 = 51/4 = 12.75

示例 2

输入: nums = [5], k = 1
输出: 5.00000000000000

题解

这个问题可以通过滑动窗口的方法来解决。

  1. 初始化窗口:首先,我们计算数组中第一个长度为 k 的子数组的和。
  2. 滑动窗口:然后,我们滑动窗口遍历整个数组,对于每个新的窗口,我们减去窗口左侧的元素,加上窗口右侧的元素,以计算新的窗口和。
  3. 更新最大平均值:对于每个窗口,我们计算平均值,并更新最大平均值。
  4. 返回结果:遍历结束后,返回计算出的最大平均值。

代码实现

double findMaxAverage(vector<int>& nums, int k) {double maxAverage = nums[0];int windowSum = 0;// 初始化窗口和for (int i = 0; i < k; ++i) {windowSum += nums[i];}maxAverage = (windowSum * 1.0) / k;// 滑动窗口for (int i = k; i < nums.size(); ++i) {windowSum = windowSum - nums[i - k] + nums[i];double windowSumAverage =  (windowSum * 1.0) / k;maxAverage = max(maxAverage, windowSumAverage);}return maxAverage;
}

复杂度分析

● 时间复杂度:O(n),其中 n 是数组 nums 的长度。我们只需要遍历一次数组。
● 空间复杂度:O(1),因为我们只使用了常数个额外变量。
这个算法通过使用滑动窗口来高效地计算每个连续子数组的和,从而找到平均值最大的 k 个连续的子数组。


http://www.mrgr.cn/news/64353.html

相关文章:

  • 音频中sample rate是什么意思?
  • 计算机组成原理之CPU的功能与基本结构
  • Unity Newtonsoft.Json 大对象序列化失败
  • 第三章数据链路层-(3.1数据链路层的功能)
  • 刘艳兵-DBA022-以下关于Oracle半连接的描述,哪些是正确的?
  • 基于Springboot+Vue的流动摊位管理系统 (含源码数据库)
  • 堆的实现--数据结构
  • 重装linux系统
  • 网页自动化测试和爬虫:Selenium库入门与进阶
  • C语言中的希尔排序
  • 大厂面试真题-如果使用guava limiter实现实例级别的缓存
  • JSP ft06 问题几个求解思路整理
  • 我国在AI领域的发展趋势
  • 【springcloud】服务之间调用失败的重试机制
  • 微服务架构面试内容整理-微服务架构的定义及优势
  • C++ --- 多线程的使用
  • 《程序内存需求估算:职场中的“暗礁”与“灯塔”》
  • 网络通信与并发编程(九)asyncio
  • 【ReactPress】一款基于React的开源博客CMS内容管理平台—ReactPress
  • Python Turtle模块详解与使用教程
  • ITK-膨胀
  • ‌频率和波长之间存在反比关系‌
  • 算法妙妙屋-------1.递归的深邃回响:C++ 算法世界的优雅之旅
  • (八)JavaWeb后端开发——Tomcat
  • 超好用的视频剪辑软件分享:10款剪辑软件推荐
  • UE5 猎户座漂浮小岛 06 角色