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

LeetCode每日一题4.29

2962. 统计最大元素出现至少 K 次的子数组

在这里插入图片描述

问题分析

输入:一个整数数组 nums 和一个正整数 k。
目标:找到所有子数组,使得该子数组中的最大元素至少出现 k 次,并返回这样的子数组的数量。

思考

  1. 找到数组中的最大值
    首先,我们需要找到数组 nums 中的最大值 mx。
  2. 统计 mx 的出现次数
    然后,我们遍历数组,统计 mx 的出现次数 cnt_mx。
  3. 使用滑动窗口技术
    为了高效地找到所有满足条件的子数组,我们可以使用滑动窗口技术:
    初始化:设置两个指针 left 和 right,分别表示窗口的左边界和右边界。同时,初始化 cnt_mx(窗口内 mx 的出现次数)和 ans(满足条件的子数组数量)。
    扩展窗口:遍历数组,每次将 right 指针向右移动一位,如果当前元素等于 mx,则 cnt_mx 加 1。
    收缩窗口:当 cnt_mx 达到 k 时,进入内部 while 循环,移动 left 指针,缩小窗口,直到 cnt_mx 小于 k。在每次移动 left 指针时,如果 nums[left] 等于 mx,则 cnt_mx 减 1。
    更新答案:每次迭代时,ans 增加 left 的值,表示以 right 为右端点且长度不小于 left 的子数组都满足条件。

代码

class Solution:def countSubarrays(self, nums: List[int], k: int) -> int:mx = max(nums)ans = cnt_mx = left = 0for x in nums:if x == mx:cnt_mx += 1while cnt_mx == k:if nums[left] == mx:cnt_mx -= 1left += 1ans += leftreturn ans

复杂度分析

时间复杂度
遍历数组:外层 for 循环遍历数组,时间复杂度为 O(n)。
滑动窗口:内层 while 循环在最坏情况下每个元素最多被访问两次(一次由 right,一次由 left),因此时间复杂度也为 O(n)。
综合上述分析,总的时间复杂度为 O(n)。
空间复杂度
额外空间:只使用了常数级的额外空间(mx、ans、cnt_mx、left 等变量),因此空间复杂度为 O(1)。

学习

在这里插入图片描述

作者:灵茶山艾府
链接:https://leetcode.cn/problems/count-subarrays-where-max-element-appears-at-least-k-times/solutions/2560940/hua-dong-chuang-kou-fu-ti-dan-pythonjava-xvwg/
来源:力扣(LeetCode)

http://www.dtcms.com/a/164314.html

相关文章:

  • 省科学技术奖申报答辩PPT设计制作美化
  • 信息检索系统的组成部分和基本架构
  • 4月29日日记
  • jenkins slave节点打包报错Failed to create a temp file on
  • AI国学智慧语录视频,条条视频10W+播放量
  • 数据处理方式 之 对数变换 和Box-Cox变换以及对应逆变换【深度学习】
  • Vue2+Vue3学习笔记
  • 什么是Amazon S3
  • 农村供水智能化远程监控解决方案
  • php学习笔记(全面且适合新手)
  • 接入层架构演变
  • Android ProcessState init
  • 初中九年级学生体测准考证照片采集软件使用说明
  • Keras模型保存、加载介绍
  • JavaScript函数声明大比拼
  • 文献阅读(三)基于干旱强度和恢复时间的生态系统恢复力评估|《Agricultural and Forest Meteorology》
  • 极狐GitLab 如何使用文件导出迁移项目和群组?
  • 前端设置三行文本省略号,失效为什么?
  • 二叉树知识点
  • Jetson Xavier NX EMMC版本刷机
  • 局部和整体的关系
  • 前端 AI 开发实战:基于自定义工具类的大语言模型与语音识别调用指南
  • Origin绘图操作:点线图符号显示不全解决方法
  • eslint相关报错收集
  • DevExpressWinForms-TreeList-获取选中行数据
  • 低版的spring boot 1.X接入knife4j
  • 数据中台一分钟
  • 细说STM32单片机FreeRTOS互斥量及其编程实例
  • Leetcode刷题报告1——哈希表
  • Leetcode 3529. Count Cells in Overlapping Horizontal and Vertical Substrings