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

统计定界子数组的数组

前言:看到这个题目的时候,只想着怎么暴力枚举右端点,结合线段树还是会超时,没找到很好的处理方法


在这里插入图片描述

超时代码

class Tree1:def __init__(self,n):self.t = [0]*(4*n)def update(self,o,l,r,index,va):if l==r:self.t[o] = vareturnmid = (l+r)//2if index<=mid:self.update(o*2,l,mid,index,va)else:self.update(o*2+1,mid+1,r,index,va)self.t[o] = max(self.t[o*2],self.t[o*2+1])def query(self,o,l,r,L,R):if L<=l and r <=R:return self.t[o]tmp = 0mid = (l+r)//2if mid>=L:tmp = max(tmp,self.query(o*2,l,mid,L,R))if R>mid:tmp = max(tmp,self.query(o*2+1,mid+1,r,L,R))return tmp
class Tree2:def __init__(self,n):self.t = [1000006]*(4*n)def update(self,o,l,r,index,va):if l==r:self.t[o] = vareturnmid = (l+r)//2if index<=mid:self.update(o*2,l,mid,index,va)else:self.update(o*2+1,mid+1,r,index,va)self.t[o] = min(self.t[o*2],self.t[o*2+1])def query(self,o,l,r,L,R):if L<=l and r <=R:return self.t[o]tmp = 1000006mid = (l+r)//2if mid>=L:tmp = min(tmp,self.query(o*2,l,mid,L,R))if R>mid:tmp = min(tmp,self.query(o*2+1,mid+1,r,L,R))return tmpclass Solution:def countSubarrays(self, nums: List[int], minK: int, maxK: int) -> int:le = 0n = len(nums)big = Tree1(n)xiao = Tree2(n)le = 0ans = 0pre = 0for i,va in enumerate(nums):big.update(1,0,n-1,i,va)xiao.update(1,0,n-1,i,va)if va>maxK or va <minK:le = i+1pre = 0continueif pre!=0 and minK < va <maxK:ans += precontinuepre = 0for j in range(le,i+1):tmpxiao = xiao.query(1,0,n-1,j,i)tmpbig = big.query(1,0,n-1,j,i)# print("xiao",j,i,tmpxiao)# print("big",j,i,tmpbig)if tmpxiao==minK and tmpbig ==maxK:pre += 1else:breakans += prereturn ans

看了题解才发现是自己思维狭隘了,这个题目我每次遇到小于minK和大于maxK的值重新计数是对的,但是可以有更加优化的方法

class Solution:def countSubarrays(self, nums: List[int], minK: int, maxK: int) -> int:ans = 0min_i = max_i = i0 = -1for i, x in enumerate(nums):if x == minK:min_i = i  # 最近的 minK 位置if x == maxK:max_i = i  # 最近的 maxK 位置if not minK <= x <= maxK:i0 = i  # 子数组不能包含 nums[i0]ans += max(min(min_i, max_i) - i0, 0)return ans
http://www.xdnf.cn/news/2146.html

相关文章:

  • 下垂控制属于构网型控制技术
  • pytest 技术总结
  • CCF CSP 第30次(2023.05)(4_电力网络_C++)
  • Fedora 43 计划移除所有 GNOME X11 相关软件包
  • Android 13 接入 MediaSession 详细文档
  • 机器学习——朴素贝叶斯法运用
  • 网络攻防第一~四集
  • T型三电平逆变器的SPWM线电压 线与中点电压有几种电平
  • 关闭网桥的STP,解决RHEL10上qemu使用u-boot加载uImage自动加载失败的问题
  • 驱动汽车供应链数字化转型的标杆解决方案:全星研发项目管理APQP软件系统:
  • DP主站转485操作流程
  • vuePress开发和使用
  • WebAssembly全栈革命:在Rust与JavaScript之间构建高性能桥梁
  • 如何轻松将RS232转为Profibus DP,提升PLC效率?
  • ClickHouse查询执行与优化
  • 数据过滤器
  • 阿里云域名智能解析至国内外AWS的合规化部署指南
  • Windows11系统中GIT下载
  • 系统架构设计中的DSSA方法:理论、实践与行业深度应用
  • 【SwitchyOmega安装教程】
  • 【Token系列】01 | Token不是词:GPT如何切分语言的最小单元
  • 思科路由器重分发(RIP动态路由+静态路由)
  • 强化学习:高级策略梯度理论与优化方法
  • react的fiber 用法
  • 6.1腾讯技术岗2025面试趋势前瞻:大模型、云原生与安全隐私新动向
  • 重定向和语言级缓冲区【Linux操作系统】
  • 用python写一个相机选型的简易程序
  • RTMP 协议解析 1
  • Linux0.11内存管理:相关代码
  • 从零实现 registry.k8s.io/pause:3.8 镜像的导出与导入