LeetCode刷题笔记 | 643 | 子数组最大平均数 | 双指针 | 滑动窗口 | 数组 | Java | 详细注释 | 三种解法

news2025/1/21 15:26:36
🙋大家好!我是毛毛张!
🌈个人首页: 神马都会亿点点的毛毛张
双指针在一定条件下可以转化成滑动窗口,这道题就是个很好的例子

LeetCode链接:643. 子数组最大平均数 I

1.题目描述

给你一个由 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 < = 1 0 5 1 <= k <= n <= 10^5 1<=k<=n<=105
  • − 1 0 4 < = n u m s [ i ] < = 1 0 4 -10^4 <= nums[i] <= 10^4 104<=nums[i]<=104

2.题解

2.1 暴力解法(超出时间限制)

public class Solution {
    public double findMaxAverage(int[] nums, int k) {
        // 初始化最大平均值为负无穷
        double maxAverage = Double.NEGATIVE_INFINITY;

        // 遍历数组中的所有可能的长度为 k 的连续子数组
        for (int i = 0; i <= nums.length - k; i++) {
            // 计算当前子数组的和
            int sum = 0;
            for (int j = i; j < i + k; j++) {
                sum += nums[j];
            }
            // 计算当前子数组的平均值
            double average = (double) sum / k;
            // 更新最大平均值
            maxAverage = average > maxAverage ? average : maxAverage;
        }

        // 返回最大平均值
        return maxAverage;
    }
}

2.2 双指针

  • 由于每次都要计算平均值,所以在这里做一个处理,先求出长度为k的区间和的最大值,返回时再求平均
class Solution {
    public double findMaxAverage(int[] nums, int k) {
        // 初始化最大和为最小整数值
        int maxSum = Integer.MIN_VALUE;
        // 左右指针初始化
        int left, right;
        // 当前窗口的和
        int sum = 0;
        
        // 遍历数组
        for (left = 0, right = 0; right < nums.length; right++) {
            // 将当前元素加入窗口和
            sum += nums[right];
            
            // 如果当前窗口大小等于 k,更新最大和
            if (right - left + 1 == k) {
                maxSum = Math.max(maxSum, sum);
            }
            
            // 当窗口大小大于等于 k 时,移动左指针
            while (right - left + 1 >= k) {
                // 将窗口左边界的元素移出和
                sum -= nums[left];
                // 移动左指针
                left++;
            }
        }
        
        // 返回最大和对应的平均值
        return (double) maxSum / k;
    }
}

2.3 双指针优化=>滑动窗口

  • 由于所求的窗口的长度是固定的,因此首先计算出数组前k个区间的和,然后再向后滑动区间
public class Solution {
    public double findMaxAverage(int[] nums, int k) {
        // 计算第一个长度为 k 的子数组的和
        int maxSum = 0;
        for (int i = 0; i < k; i++) {
            maxSum += nums[i];
        }

        // 当前子数组的和
        int currentSum = maxSum;

        // 使用滑动窗口遍历数组中的其他可能的长度为 k 的连续子数组
        for (int i = k; i < nums.length; i++) {
            // 更新当前子数组的和
            currentSum = currentSum - nums[i - k] + nums[i];

            // 更新最大和
            if (currentSum > maxSum) {
                maxSum = currentSum;
            }
        }

        // 返回最大平均值
        return (double) maxSum / k;
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1978475.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringMVC 工作流程简述

SpringMVC 工作流程简述 1. 请求接收2. 请求解析3. 查找处理器4. 处理器适配5. 调用处理器6. 处理结果7. 结果传递8. 视图解析9. 视图渲染10. 响应用户 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; #mermaid-svg-xZqkXNPjG0SH5tMA {font-…

经典算法KMP讲解,包含C++解法ACM模式

写在前面&#xff1a;一个人能走的多远不在于他在顺境时能走的多快&#xff0c;而在于他在逆境时多久能找到曾经的自己。——KMP 讲解前置知识模拟next的构建匹配思路匹配字符串构建next数组 模板代码 题目一&#xff1a;KMP字符串题目二&#xff1a;找出字符串中第一个匹配项的…

电脑开机启动项管理小工具,绿色免安装

HiBit Startup Manager 是一款功能强大的启动项管理工具&#xff0c;旨在帮助用户管理和优化计算机的自动启动程序。该软件通过添加或删除应用程序、编辑它们的属性以及管理流程、服务、任务调度程序和上下文菜单来实现这一目标。 HiBit Startup Manager 提供了以下主要功能&a…

Day82 代码随想录打卡|贪心算法篇---K次取反后最大化的数组和

题目&#xff08;leecode T1005&#xff09;&#xff1a; 给你一个整数数组 nums 和一个整数 k &#xff0c;按以下方法修改该数组&#xff1a; 选择某个下标 i 并将 nums[i] 替换为 -nums[i] 。 重复这个过程恰好 k 次。可以多次选择同一个下标 i 。 以这种方式修改数组后…

【C++】第一讲:入门概论

个人主页&#xff1a; 深情秋刀鱼-CSDN博客 C专栏&#xff1a;C程序设计 一、C发展历史 C的起源可以追溯到1979年&#xff0c;当时Bjarne Stroustrup(本贾尼斯特劳斯特卢普&#xff0c;这个翻译的名字不 同的地⽅可能有差异)在⻉尔实验室从事计算机科学和软件⼯程的研究⼯作。…

Linux中NFS配置

文章目录 一、NFS介绍1.1、NFS的工作流程1.2、NFS主要涉及的软件包1.3、NFS的主要配置文件 二、安装NFS2.1、更新yum2.2、安装NFS服务2.3、配置NFS服务器2.4、启动NFS服务2.5、配置防火墙&#xff08;如果启用了防火墙&#xff0c;需要允许NFS相关的端口通过&#xff09;2.6、生…

最新版Sonible Plugins Bundle v2024 winmac,简单智能,持续更新长期有效

一。Sonible Plugins Bundle v2024 win&mac Sonible Plugins Bundle是一款以创作者为中心的智能音频插件系列。这些工具的特点是易于使用&#xff0c;搭配高级处理和优质音质。pure:bundle的所有插件都由sonible的智能插件系列中使用的技术驱动&#xff0c;但在设计时考虑到…

论文解读(13)-StreetCLIP

原文&#xff1a; LEARNING GENERALIZED ZERO-SHOT LEARNERS FOR OPEN-DOMAIN IMAGE GEOLOCALIZATION StreetCLIP Preprint (arxiv.org) 摘要 本文的任务是Image geolocalization&#xff08;图像地理定位&#xff09; predicting the geographic coordinated of origin for …

【Material-UI】异步请求与Autocomplete的高效集成指南

文章目录 一、异步请求的两种用法1. 延迟加载&#xff08;Load on open&#xff09;实现方法 2. 动态搜索&#xff08;Search as you type&#xff09;实现方法 二、性能优化与注意事项1. 请求节流与去抖2. 禁用内置过滤3. 错误处理 三、实际应用案例&#xff1a;Google Maps P…

[数据集][目标检测]肾结石检测数据集VOC+YOLO格式1299张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;1299 标注数量(xml文件个数)&#xff1a;1299 标注数量(txt文件个数)&#xff1a;1299 标注…

目标跟踪那些事

目标跟踪那些事 跟踪与检测的区别 目标跟踪和目标检测是计算机视觉中的两个重要概念&#xff0c;但它们的目的和方法是不同的。 目标检测(object Detection)&#xff1a;是指在图像或视频帧中识别并定位一个或多个感兴趣的目标对象的过程 。 目标跟踪(object Tracking)&…

Java面试八股之Spring框架中使用到了哪些设计模式

Spring框架中使用到了哪些设计模式 Spring 框架是一个广泛使用的 Java 应用程序框架&#xff0c;它包含了许多设计模式的实现。以下是一些 Spring 框架中使用的设计模式&#xff1a; 工厂模式 (Factory Pattern) 描述&#xff1a;Spring 使用 BeanFactory 和 ApplicationCon…

深度优先遍历图--DFS

一. 前言 图的遍历定义&#xff1a;从已经给出的连通图中某一顶点出发&#xff0c;沿着一些边访遍图中所有的顶点&#xff0c;使每个顶点仅被访问一次&#xff0c;就叫做图的遍历&#xff0c;它是图的基本运算。 图的遍历实质&#xff1a;找每个顶点的邻接点的过程。 在找顶点…

【C语言】Top K问题【建小堆】

前言 TopK问题&#xff1a;从n个数中&#xff0c;找出最大&#xff08;或最小&#xff09;的前k个数。 在我们生活中&#xff0c;经常会遇到TopK问题 比如外卖的必吃榜&#xff1b;成单的前K名&#xff1b;各种数据的最值筛选 问题分析 显然想开出40G的空间是不现实的&#…

【目标检测实验系列】YOLOv5高效涨点:基于NAMAttention规范化注意力模块,调整权重因子关注有效特征(文内附源码)

1. 文章主要内容 本篇博客主要涉及规范化注意力机制&#xff0c;融合到YOLOv5(v6.1版本&#xff0c;去掉了Focus模块)模型中&#xff0c;通过惩罚机制&#xff0c;调整特征权重因子&#xff0c;使模型更加关注有效特征&#xff0c;助力模型涨点。 2. 简要概括 论文地址&#x…

2024-08-04 C# 中 string 实用技巧级新手常见错误

文章目录 1 方法重载1.1 string.Split()1.2 string.Indexof() 2 方法对比2.1 Contains2.2 Equals2.3 字符串差值 3 StringBuilder4 换行符4.1 推荐做法4.2 换行符混合问题 5 文件路径分隔5.1 推荐做法 6 测试代码6.1 "OnlySplit()" vs "SplitWithTrim()"6.…

三十种未授权访问漏洞复现 合集( 二 )

未授权访问漏洞介绍 未授权访问可以理解为需要安全配置或权限认证的地址、授权页面存在缺陷&#xff0c;导致其他用户可以直接访问&#xff0c;从而引发重要权限可被操作、数据库、网站目录等敏感信息泄露。---->目录遍历 目前主要存在未授权访问漏洞的有:NFS服务&a…

杂粮饼:健康与美味的完美融合

在美食的世界里&#xff0c;杂粮饼以其独特的魅力吸引着众多食客。这种看似平凡的美食&#xff0c;却蕴含着丰富的营养和令人陶醉的口感。杂粮饼&#xff0c; 顾名思义&#xff0c;是由多种杂粮混合制作而成。常见的杂粮如玉米、小米、高粱、燕麦等&#xff0c;它们各自带着独特…

Ability框架介绍

Ability Ability是应用所具备能力的抽象&#xff0c;也是应用程序的基本组成部分&#xff0c;主要包括组件生命周期回调、系统环境变化通知、应用跳转、卡片开发等能力。 Ability框架模型两种形态 FA模型Stage模型 Stage模型 Stage模型中的应用组件是由Ability这个基础概念…

LLM动手实践(一): 微调google的bert和vit模型完成文本和图片的分类任务

1. 写在前面 最近大模型比较火热&#xff0c;也正好在公司开始接触这块相关的业务&#xff0c;大模型是未来的趋势&#xff0c;对于研发工程师来讲&#xff0c;是powerful的效能工具&#xff0c;所以想沉淀一些大模型实践相关的笔记来记录自己在使用大模型产品&#xff0c;部署…