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

leetcode643. 子数组最大平均数 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.00000

提示:

n == nums.length
1 <= k <= n <= 105
-104 <= nums[i] <= 104

二、题目解析

1、暴力,双重for循环

class Solution {public double findMaxAverage(int[] nums, int k) {if(nums == null || nums.length < k){return 0;}double sum = 0,max = Integer.MIN_VALUE;int count = 0;for(int i = 0;i <= nums.length - k;i++){sum = nums[i];count = 1;for(int temp = i + 1;count < k && temp < nums.length;count++,temp++){sum += nums[temp];}max = sum > max ? sum : max;}return max / k;}
}

时间复杂度O((n-k+1)*k),空间复杂度O(1)
运行超时
在这里插入图片描述
2、滑动窗口
思考在1基础上,内层for循环可以优化,第一次拿到前4个元素,形成初始窗口,后面向右滑动即可,每次右入1个元素,左出1个元素;在滑动的过程中不断更新最大值。

class Solution {public double findMaxAverage(int[] nums, int k) {if(nums == null || nums.length < k){return 0;}double sum = 0,max = Integer.MIN_VALUE;int count = 0;//i指的是右边界的可能位置,故最大值是nums.length - 1for(int i = 0;i < nums.length;i++){//右边新的元素进入窗口sum += nums[i];//初始化窗口时,窗口大小不足k则扩充if(i < k - 1){continue;}//更新最大值max = sum > max ? sum : max;//最左边元素离开窗口sum -= nums[i - k + 1];}return max / k;}
}

时间复杂度O(n),空间复杂度O(1)
在这里插入图片描述

http://www.xdnf.cn/news/19127.html

相关文章:

  • ORM基础操作+路由系统
  • destoon8.0使用post插入keyword热搜到表
  • SQL注入6----(其他注入手法)
  • Spring和mybatis整合后事务拦截器TransactionInterceptor开启提交事务流程
  • 音视频学习(六十一):H265中的VPS
  • 本地部署 hello-algo 并实现外部访问
  • 趣味学RUST基础篇(结构体方法)
  • 吴恩达机器学习(四)
  • 在 MyBatis 中oracle基本数值类型的 JDBC 类型映射
  • Linux命令学习:make,make install,modprobe,lsmod
  • 鸿蒙服务端开发资料汇总
  • android adb调试 鸿蒙
  • 119、【OS】【Nuttx】【周边】效果呈现方案解析:变量展开
  • 计算机三级嵌入式填空题——真题库(26)原题附答案速记
  • components.d.ts声明组件类型的作用
  • RabbitMQ 和 Kafka
  • github同一台电脑支持两个或以上的ssh账户(macos或Linux系统),解决Key is already in use问题
  • 苍穹外卖Day7 | 缓存商品、购物车、SpringCache、缓存雪崩、缓存套餐
  • DVWA靶场通关笔记-CSRF(Impossible级别)
  • VMware 设置 Ubuntu 虚拟机桥接模式完整教程
  • Java进阶教程之多线程与并发编程
  • 33. 包装类型是什么?基本类型和包装类型有什么区别?
  • 深入解析 Java interrupt
  • 从零开始部署 Kubernetes Dashboard:可视化管理你的集群
  • 不惧和谐,永不失效!!
  • 高并发内存池(19)-用基数树优化
  • JavaScript事件
  • FastAPI 入门科普:下一代高性能 Python Web 框架
  • 顶点 (VS)vs 片段(FS):OpenGL纹理滚动着色器的性能博弈与设计哲学
  • Shader开发(十八)实现纹理滚动效果