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

带做网站win10怎么删除2345网址导航

带做网站,win10怎么删除2345网址导航,自己怎么做一个小程序,网站建设架构细节文章目录一、 题目描述二、 从暴力解法到滑动窗口1. 暴力解法2. 滑动窗口三、 滑动窗口的实现步骤四、 代码实现 (最佳实践)五、 关键点与复杂度分析学习完二叉树的大部分基本功后,接下来我们来学习一种非常重要且应用广泛的算法思想—— 滑动窗口 (Sliding Window)…

文章目录

  • 一、 题目描述
  • 二、 从暴力解法到滑动窗口
    • 1. 暴力解法
    • 2. 滑动窗口
  • 三、 滑动窗口的实现步骤
  • 四、 代码实现 (最佳实践)
  • 五、 关键点与复杂度分析

学习完二叉树的大部分基本功后,接下来我们来学习一种非常重要且应用广泛的算法思想—— 滑动窗口 (Sliding Window)。我们将通过一道经典的入门题 LeetCode 643 : 子数组最大平均数 I 【难度:简单;通过率:44.1%】来开始。这道题是“定长滑动窗口”的完美示例

一、 题目描述

给你一个由 n 个元素组成的整数数组 nums 和一个整数 k

请你找出平均数最大且 长度为 k 的连续子数组,并输出该最大平均数。任何误差小于 10^-5 的答案都将被视为正确答案

示例:

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

二、 从暴力解法到滑动窗口

1. 暴力解法

最直观的想法是什么?就是找出所有长度为 k 的连续子数组,分别计算它们的和以及平均数,然后找到其中的最大值

// 暴力解法:为了对比,不推荐
public double findMaxAverage_bruteForce(int[] nums, int k) {double maxAvg = -Double.MAX_VALUE;// 遍历所有可能的子数组起点for (int i = 0; i <= nums.length - k; i++) {long sum = 0;// 对每个长度为 k 的子数组求和for (int j = i; j < i + k; j++) {sum += nums[j];}maxAvg = Math.max(maxAvg, (double) sum / k);}return maxAvg;
}

效率分析:

  • 外层循环 i 遍历了约 N
  • 内层循环 j 每次都执行 k
  • 时间复杂度:O(N * k)。当 k 接近 N 时,复杂度接近 O(N²),效率很低

问题在哪?
我们做了大量的重复计算!在计算 [1, 12, -5, -6] 的和之后,为了计算下一个子数组 [12, -5, -6, 50] 的和,我们又重新加了一遍 12, -5, -6

2. 滑动窗口

滑动窗口思想的核心就是避免重复计算。我们可以想象有一个长度固定为 k 的“窗口”在数组上滑动

  • 当窗口向右滑动一格时,我们不需要重新计算窗口内所有元素的和
  • 我们只需要:
    1. 加上新进入窗口的元素
    2. 减去刚离开窗口的元素

这样,每次移动窗口,我们都只需要进行一次加法和一次减法,时间复杂度是 O(1)


三、 滑动窗口的实现步骤

  1. 初始化第一个窗口:计算数组前 k 个元素的和,得到第一个窗口的和 windowSum。同时,用 windowSum 初始化 maxSum
  2. 滑动窗口:从第 k 个元素开始遍历数组(索引从 kn-1
    • 对于每个新元素 nums[i],它将进入窗口
    • 同时,元素 nums[i-k] 将离开窗口
    • 更新窗口的和:windowSum = windowSum + nums[i] - nums[i-k]
    • 每次更新后,都用新的 windowSummaxSum 比较,并保留较大者
  3. 计算结果:遍历结束后,maxSum 就是所有长度为 k 的子数组中的最大和。将其除以 k,即可得到最大平均数

四、 代码实现 (最佳实践)

class Solution {public double findMaxAverage(int[] nums, int k) {// 1. 初始化第一个窗口的和long windowSum = 0;for (int i = 0; i < k; i++) {windowSum += nums[i];}// 用第一个窗口的和来初始化 maxSumlong maxSum = windowSum;// 2. 滑动窗口// 从第 k 个元素开始,作为新进入窗口的元素for (int i = k; i < nums.length; i++) {// 更新窗口的和:加上新元素,减去旧元素// 新元素是 nums[i],旧元素是 nums[i-k]windowSum = windowSum + nums[i] - nums[i-k];// 更新 maxSummaxSum = Math.max(maxSum, windowSum);}// 3. 计算并返回最大平均数return (double) maxSum / k;}
}

五、 关键点与复杂度分析

  • 定长窗口:本题的窗口长度 k固定的,这是最简单的滑动窗口模型(定长滑动窗口,后面我们会继续进阶高难度的滑动窗口)
  • 双指针思想:滑动窗口的本质是“双指针”思想的一种应用。我们可以想象一个左指针 left 和一个右指针 right 维护着这个窗口。当右指针向右移动时,左指针也以相同的速度向右移动,从而保持窗口大小不变
  • 数据类型:在计算和时,使用 long 类型的 windowSummaxSum 是一个好习惯,可以防止当数组元素和 k 都很大时可能发生的整数溢出
  • 时间复杂度O(N) 我们只需要对数组进行一次完整的遍历
  • 空间复杂度O(1) 我们只使用了几个额外的变量来存储和,没有使用与输入规模相关的额外空间
http://www.dtcms.com/a/492693.html

相关文章:

  • 企业网站开发框架如何制作简单的网站
  • 简述网站的制作步骤网站建设经费申请
  • c 网站开发数据库连接产品关键词大全
  • protected 和默认,都能被子类访问吗
  • 鲜花网站建设项目策划书公司做网站的费用属于什么费用
  • 做微课的网站有哪些建立什么船籍港
  • 网站分析与优化皮具网站设计
  • 教育培训网站建设方案模板蓬莱建设管理局网站
  • 网站表单点击切换判断网站的好坏
  • 强化学习:Gym环境,自定义奖励函数设计?
  • 做电影网站需要服务器吗婚礼纪网站怎么做请帖
  • 做网站用模板便宜做网站怎么样
  • 网站负责人不是法人做繁体书的网站
  • 建设专业网站的价格企业门户网站解决方案
  • 静态网站模板 大气wordpress更新以后进不去
  • Qtday2
  • 佛山新网站建设特色公司网站建设介绍
  • 监控进程创建
  • 外贸箱包网站模板wordpress内存占用
  • 网站功能是什么重庆室内设计
  • 做特产的网站个人备案网站做盈利合法吗
  • 高明网站设计网站建设通知
  • 一个jsp做的购物小网站诚信档案建设网站首页
  • 做个人网站到哪里做中企动力销售好做吗
  • 一个网站做三个关键词wordpress左侧菜单
  • 物业管理 网站开发代做财务报表分析网站
  • 阳狮做网站网络软文怎么写
  • 配置资源管理
  • 北京便宜网站建设应用商店下载2022最新版
  • 响应式网站哪里做应届生去外包公司