码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • LeetCode 643. Maximum Average Subarray I


    You are given an integer array nums consisting of n elements, and an integer k.

    Find a contiguous subarray whose length is equal to k that has the maximum average value and return this value. Any answer with a calculation error less than 10-5 will be accepted.

    Example 1:

    Input: nums = [1,12,-5,-6,50,3], k = 4
    Output: 12.75000
    Explanation: Maximum average is (12 - 5 - 6 + 50) / 4 = 51 / 4 = 12.75
    

    Example 2:

    Input: nums = [5], k = 1
    Output: 5.00000
    

    Constraints:

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

    本质就是求数组里长度为k的字数组的最大值,是一道简单的prefix sum / sliding window题。刚开始又给想复杂了……其实可以直接算sum,不需要往window里加加减减。

    sliding window就是一个window里放k个元素,每次remove掉第一个,加上新的,一个for loop遍历完所有。刚开始写的时候max初始化成了double.min,这时候第二个for loop就cover不到k==n的corner case,导致结果出错。

    Runtime: 15 ms, faster than 23.03% of Java online submissions for Maximum Average Subarray I.

    Memory Usage: 107.5 MB, less than 24.36% of Java online submissions for Maximum Average Subarray I.

    1. class Solution {
    2. public double findMaxAverage(int[] nums, int k) {
    3. double sum = 0;
    4. for (int i = 0; i < k; i++) {
    5. sum += nums[i];
    6. }
    7. double max = sum;
    8. for (int i = k; i < nums.length; i++) {
    9. sum -= nums[i - k];
    10. sum += nums[i];
    11. max = Math.max(max, sum);
    12. }
    13. return max / k;
    14. }
    15. }

    prefix sum的做法就是先一个for loop计算出当前所有元素的和,然后再一个for loop对和进行相减,取最大。其中也有一些小坑需要注意,就是max需要初始化为sums[k - 1],然后从i = k遍历到nums.length。

    Runtime: 15 ms, faster than 23.03% of Java online submissions for Maximum Average Subarray I.

    Memory Usage: 108 MB, less than 20.27% of Java online submissions for Maximum Average Subarray I.

    1. class Solution {
    2. public double findMaxAverage(int[] nums, int k) {
    3. int[] sums = new int[nums.length];
    4. sums[0] = nums[0];
    5. for (int i = 1; i < nums.length; i++) {
    6. sums[i] = sums[i - 1] + nums[i];
    7. }
    8. double result = sums[k - 1];
    9. for (int i = k; i < nums.length; i++) {
    10. double sum = sums[i] - sums[i - k];
    11. result = Math.max(sum, result);
    12. }
    13. return result / k;
    14. }
    15. }

  • 相关阅读:
    【JavaWeb】Tomcat部署Web项目以及Maven工具的使用
    【正点原子STM32连载】第二十一章 通用定时器实验 摘自【正点原子】MiniPro STM32H750 开发指南_V1.1
    ssm毕设项目志愿者活动管理平台zx2tk(java+VUE+Mybatis+Maven+Mysql+sprnig)
    元对象特性测试实例
    艾美捷 抗人IL-12/-23(p40)mAbs MT86/221,纯化方案
    KubeSphere 在互联网医疗行业的应用实践
    论文选题分享及思路(一)《基于C51单片机的自动化测量产线的设计》
    项目实战:中央控制器实现(1)-基本功能实现-调用Controller中的方法
    java计算机毕业设计环巢湖区域旅游网站源码+mysql数据库+系统+lw文档+部署
    [从零开始学习FPGA编程-58]:集成电路设计的运作模式(Fabless/Foundry/IDM模式)
  • 原文地址:https://blog.csdn.net/qq_37333947/article/details/127681767
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号