leetcode 6043 2251树状数组的应用

errno错误对照表 错误对照表: 错误值 内容 errno 0 : Success 成功 errno 1 : Operation not permitted 不允许操作 errno 2 : No such file or directory 没有这样的文件或目录 errno 3 : No such process 没有这样的过程 errno 4 : Interrupted system call 中断的系统调用 errno 5 : Input/output error 输入/输出错误 阅读详情

题目描述6043:
给你一个二维整数数组 rectangles ,其中 rectangles[i] = [li, hi] 表示第 i 个矩形长为 li 高为 hi 。给你一个二维整数数组 points ,其中 points[j] = [xj, yj] 是坐标为 (xj, yj) 的一个点。

第 i 个矩形的 左下角 在 (0, 0) 处,右上角 在 (li, hi) 。

请你返回一个整数数组 count ,长度为 points.length,其中 count[j]是 包含 第 j 个点的矩形数目。

如果 0 <= xj <= li 且 0 <= yj <= hi ,那么我们说第 i 个矩形包含第 j 个点。如果一个点刚好在矩形的 边上 ,这个点也被视为被矩形包含。
示例1:
在这里插入图片描述
输入:rectangles = [[1,2],[2,3],[2,5]], points = [[2,1],[1,4]]
输出:[2,1]
解释:
第一个矩形不包含任何点。
第二个矩形只包含一个点 (2, 1) 。
第三个矩形包含点 (2, 1) 和 (1, 4) 。
包含点 (2, 1) 的矩形数目为 2 。
包含点 (1, 4) 的矩形数目为 1 。
所以,我们返回 [2, 1] 。

示例2:
在这里插入图片描述
输入:rectangles = [[1,1],[2,2],[3,3]], points = [[1,3],[1,1]]
输出:[1,3]
解释:
第一个矩形只包含点 (1, 1) 。
第二个矩形只包含点 (1, 1) 。
第三个矩形包含点 (1, 3) 和 (1, 1) 。
包含点 (1, 3) 的矩形数目为 1 。
包含点 (1, 1) 的矩形数目为 3 。
所以,我们返回 [1, 3] 。
思路:
本题如果暴力求解的话会超出时间限制,所以提出了使用有序list:Sortedlist和树状数组的方式。

from typing import List
from sortedcontainers import SortedList

class Solution:
    def countRectangles(self, rectangles: List[List[int]], points: List[List[int]]) -> List[int]:

        rectangles.sort(reverse=True)  # 按照横、纵坐标倒序排列
        points = [(x, y, i) for i, (x, y) in enumerate(points)]
        points.sort(reverse=True)  # points 也是倒序排列的这样可以减少比较的时间

        n = len(rectangles)
        res = [0] * len(points)


        j = 0  # 指向rectangles
        sl = SortedList()  # 有序数组:存储rec_y: rectangles[1]
        for x, y, i in points:
            # 【固定x,二分搜索y】
            # 每次循环的时候,不需要对j进行重新赋值,因为points和rec都是降序排列完毕的
            print("当前的i, j:", i, j)
            while j < n and x <= rectangles[j][0]:  # rec_x >= point_x的矩形,其rec_y入列
                sl.add(rectangles[j][1])  # 有序数组sl中加入新元素rec_y
                j += 1
            print(sl)
            print("含义:",sl.bisect_left(y))
            res[i] = len(sl) - sl.bisect_left(y)  # 每次只需要考虑y满足的有几个即可
            # sl.bisect_left(y):表示当前有序数组sl中纵坐标 rec_y 比 point_y 小的矩形数目
            # 这个函数是一个二分查找的形式,也可以减少时间复杂度
        return res

from typing import List
# 树状数组就是求区间和的一种方式
# 本题的思想就是在固定x之后,找满足的y的区间范围内[y, max_y]之间的数量
# 这个数量对应的就是一个数组的区间和(可以用区间和的差值得到)
# 树状数组的一个较大的应用就是前缀和
# 这种利用树状数组求前缀和的方式,在原数组发生改变的时候,求前缀和的时间复杂度会减少,因为是分区间进行求解的

class Solution:
    def countRectangles(self, rectangles: List[List[int]], points: List[List[int]]) -> List[int]:

        '''树状数组模板'''   # 这里需要背下来

        def lowbit(x):  # lowbit函数
            return x & (-x)

        def add(i, delta):  # 坐标i处依次添加delta
            while i < len(tree):
                tree[i] += delta
                i += lowbit(i)

        def query(i):  # presum函数
            presum = 0
            while i > 0:
                presum += tree[i]
                i -= lowbit(i)
            return presum

        '''主程序'''
        rectangles.sort(reverse=True)  # 按照横、纵坐标倒序排列
        points = [(x, y, i) for i, (x, y) in enumerate(points)]
        points.sort(reverse=True)

        # 【固定x,检索y】
        max_recy = 0  # 树状数组中元素的最大值
        for rec in rectangles:
            max_recy = max(max_recy, rec[1])   # 求y的最大值
        print(max_recy)
        tree = [0] * (max_recy + 1)  # 树状数组的大小,这里需要注意加一,因为树状数组是从1开始的
        print(tree)
        res = [0] * len(points)
        j = 0
        for (x, y, i) in points:
            if y > max_recy:  # point_y > rec_y的最大值,没有矩形能够包含
                continue
            # rec_x >= point_x的矩形,其rec_y放入树状数组中
            while j < len(rectangles) and x <= rectangles[j][0]:
                add(rectangles[j][1], 1)  # 更新树状数组 注意这里树状数组的含义:“+1”部分,思想比较巧妙
                j += 1
            print("当前i下,树状数组为:", i, tree)

            res[i] = query(max_recy) - query(y - 1)  # 区间和

        return res

2251和本题是完全类似的,只是从二维变成了一维
问题链接

# 相当于和6043相同的,只不过是把比较的数组变成了一维的
# 相当于横坐坐标都是相同的值
# 用排序和树状数组都可以解
from sortedcontainers import SortedList
class Solution(object):
    def fullBloomFlowers(self, flowers, persons):
        """
        :type flowers: List[List[int]]
        :type persons: List[int]
        :rtype: List[int]
        """
        flowers.sort()  # 倒序排列
        persons = [(x, i) for i, x in enumerate(persons)]
        persons.sort()

        n = len(flowers)
        j = 0
        res = [0] * len(persons)
        sl = SortedList()
        for x, i in persons:
            while j < n and x >= flowers[j][0]:
                sl.add(flowers[j][1])
                j += 1
            res[i] = len(sl) - sl.bisect_left(x)
        return res

# 利用树状数组进行求解

class Solution(object):
    def fullBloomFlowers(self, flowers, persons):
        """
        :type flowers: List[List[int]]
        :type persons: List[int]
        :rtype: List[int]
        """
        flowers.sort()
        persons = [(x,i) for i,x in enumerate(persons)]
        persons.sort()

        # 树状数组模板
        def lowbit(x):
            return x & (-x)

        def add(i, delta): # 在i处加delta
            while i < len(tree):
                tree[i] += delta
                i += lowbit(i)

        def query(i): # 前缀和函数
            preum = 0
            while i > 0:
                # print(i)
                preum += tree[i]
                i -= lowbit(i)
            return preum

        n = len(flowers)
        j = 0
        max_f = 0  # 树状数组中元素的最大值
        for rec in flowers:
            max_f = max(max_f, rec[1])  # 求y的最大值
        # print("最大值:", max_f)
        tree = [0] * (max_f+1)   # !!!这种方式维护一个tree使用的内存太多了
        res = [0] * len(persons)

        for x, i in persons:
            if x > max_f:
                continue
            while j < n and x >= flowers[j][0]:
                add(flowers[j][1], 1)
                j += 1
            res[i] = query(max_f) - query(x-1)
        return res

Python:爬取数据出现response.status_code为403解决方法 目录前言1. 原理2. 代码 前言 出现403的返回结果 主要是有些服务器为了防止访问量过大,承受服务器的压力,或者是拒绝你的访问。服务器接收到这个信息,理应返回了这个403的信息 在前一块的代码中解决了 Python:爬取数据出现response.status_code为418解决方法 如果还出现了403的访问错误 可以通过如下解决 1. 原理 服务器拒绝访问,可以通过给服务器登录,获取当前的cookie来得到网址的信任。得以爬取该网址的信息 在head头中加入cookie的信息 具体怎么查找该cooki 阅读详情

相关推荐

线性代数知识点整理

线性代数基础知识点摘要整理

cuguanren的博客 3万+

[思维题]leetcode6043:统计包含每个点的矩形数目(medium)

题目: 题解: 本题的横坐标的范围最大达到了 1e9,而纵坐标的范围才 100,所以纵坐标才是本题的突破口。题目实质上问的是对于每一个点 (xi,yi),求横纵坐标都大于等于 xi ,yi 的矩形个数。因此我们把 100 种纵坐标看成 100 行数据,然后将矩形的横坐标装入相应的行中,并使用排序来使行中的横坐标有序。最后我们遍历每一个点 (xi,yi),从 yi 行出发到 100行,使用二分统计这些行中横坐标大于等于 xi 的矩形个数,这样就统计所有横纵坐标大于等于 xi yi 的举行个数了。

algsup 1364

PAT|中国大学MOOC-浙江大学翁恺-C语言程序设计习题集(更新中)

##2-0. 整数四则运算 时间限制:400 ms 内存限制:65536 kB 代码长度限制:8000 B 判题程序:Standard 作者:乔林(清华大学) 本题要求编写程序,计算2个正整数的和、差、积、商并输出。题目保证输入和输出全部在整型范围内。 输入格式: 输入在一行中给出2个正整数A和B。 输出格式: 在4行中按照格式“A 运算符 B = 结果”顺序输出和、差、积、商。 输入样例: 3 ...

小鱼波波波 6万+

leetcode:6043. 统计包含每个点的矩形数目【经典:分组 + 排序 + 二分查找】

初步分析 这道题很直观的就是找出每个points中的point 对应rectangle中的横纵坐标都大于等于p的 如果直接找的话要n方 所以肯定要排序的 但是是按x排,还是按y排,这就很纠结了。。。。。 分组再排序 这里有一种通用的方法就是先按一个属性分组,之后再按另一个排 由于这里y的范围较小,我们可以按y分组,根据y的大小构造哈希 然后对于每一个y分组里面都存着一个x的sortedlist() 由于要找大于等于当前x和y的 遍历的时候首先找出比当前y大的分组,然后再根据每个分组的sortedlist使.

小楼一夜听春雨 1531

使用Navicat连接Oracle数据库及ORA-12541: TNS: 无监听程序、ORA-28547:connection to server failed、ORA-12514:TNS报错解决方案

使用Navicat连接Oracle数据库及ORA-12541: TNS: 无监听程序、ORA-28547:connection to server failed、ORA-12514:TNS报错解决方案。

蓝多多的小仓库 5219

斗鱼直播间弹幕爬虫实战:WebSocket连接与实时数据采集

在数据驱动的时代,直播平台的弹幕数据蕴含着巨大的价值——用户行为分析、舆情监控、弹幕情感分析、直播热度评估等应用场景层出不穷。斗鱼作为国内领先的直播平台,其弹幕系统基于WebSocket协议实现实时双向通信。本文将带您从零开始,使用Python构建一个完整的斗鱼直播间弹幕爬虫系统。

2201_76125261的博客 136

LR:Code - 60990,Code - 10343 问题解决

Code - 60990 Error: Two Way Communication Error: Function two_way_comm_post_message /two_way_comm_post_message_ex failed.错误及Code - 10343 Error: Communication error: Cannot send the message since ...

aea26044的博客 1481

基于YOLO的智能视频监控异常行为检测研究:从算法原理到落地部署的全栈实践

本文深入探讨如何利用 YOLO(You Only Look Once)系列算法构建一套端到端的异常行为检测系统。文章首先回顾 YOLOv8 在时空建模上的局限,然后提出“YOLO-STA(Spatio-Temporal Aggregation)”轻量级改进框架,在公开数据集 UCF-Crime 上将异常行为检测的 mAP@0.5 从 72.4 提升到 80.1;接着给出完整训练、推理、部署的 Python 代码(PyTorch + TensorRT),并介绍如何仅用 4 GB 显存的 Jetson Xavi

博客 1330

LeetCode 6043. 统计包含每个点的矩形数目(二分)

文章目录题目方法一:哈希 + 二分Reference 题目 6043. 统计包含每个点的矩形数目 方法一:哈希 + 二分 由题目提示可知: 1≤li≤1091≤hi≤100 1 \le l_i \le 10^9 \\ 1 \le h_i \le 100 1≤li​≤1091≤hi​≤100 即矩形的高度范围远远小于矩形宽度。因此考虑对宽度进行二分。 算法流程: 创建一个哈希表map,key为矩形的高度,value为具有相同高度的矩形的宽度,遍历rectangles,填充该map,随后,遍历

xylitolz的博客 1069

谷歌A2A协议入门指南:附简易Python代码示例

继"关税"之后,当下最热门的词汇当属AI智能体——这种基于人工智能的软件能够执行复杂任务、实现工作流自动化并提升生产效率。但迄今为止,大多数智能体都处于各自为政的状态,难以顺畅协作。就像团队执行重大项目时,成员之间却无法交流!对于技术人员而言,一个可能遇到的典型场景是:假设你需要协调四个不同的AI服务——处理用户查询的Gemini智能体、在向量数据库进行搜索的AI应用、基于Claude的摘要生成器,以及运行专业领域逻辑的Python智能体。

独立开发,substack顶级编辑 799

分享一个完整的KANO问卷(包含正反问题和选项设置)

本文介绍了KANO模型问卷的设计与应用,用于评估功能需求优先级。问卷包含基本信息、功能评估(正反问题设计)、界面评估及开放问题,选项定义明确(如"非常喜欢"到"很不喜欢")。数据清洗规则包括剔除矛盾回答和注意力检验。通过量化编码和矩阵分析,将需求分为魅力型、期望型、必备型等类别。示例数据显示健康监测为必备型(72%),电子围栏为期望型(45%),适老化改造为无差异型(38%)。该模型为产品决策提供客观量化依据。

从技术实践立足,从项目管理方法论延伸思考 1795

T-code:SE01,SE93,SE43 经常使用的几个事务码

T-code:SE93, 给程序创建事务码,修改事务码,删除事务码 T-code:SE43, 将创建好的事务码添加到树型列表,方便用户查看。 区域菜单里面填写你将此事务码打算放置的列表的哪个目录里,YWPP-- 顾问公司会为你们建好。 点击 编辑,在弹出的对话框里 选择“英语”,我选择“中文”是创建不了的。不知道你们的版本是否可以? 在你需要建立

兔宝学习ABAP整理笔记 2万+

【硬刚Hadoop】HADOOP MAPREDUCE(1):概述

本文是对《【硬刚大数据之学习路线篇】从零到大数据专家的学习指南(全面升级版)》的Hadoop部分补充。 1 MapReduce定义 MapReduce是一个分布式运算程序的编程框架,是用户开发“基于Hadoop的数据分析应用”的核心框架。 MapReduce核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序,并发运行在一个Hadoop集群上。 2MapReduce优缺点 2.1 优点 1)MapReduce易于编程 它简单的实现一些接口,就可以完成一个分布式程序..

微信搜:import_bigdata,大数据领域硬核原创作者 463

typescript 错误码大全

typescript错误码大全,ts错误码

ispaomoya博客 1万+

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

elasticsearch更新数据操作update_by_query

  update_by_query 顾名思义,通过查询更新,既先query出符合条件的内容再进行update操作,新增字段,修改字段值都可以满足 demo: es = Elasticsearch() body = { "script": { "lang": "painless", # "inline"...

andiaoqiong6043的博客 1881

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

codevs1034(网络流)

问最少的时间, 这是网络流的一个类型,即动态流问题:题目要求的不是能送最多多少人,而是限定了流量,求最少需要多少时间。我们面临着难题,一般的流网络无法表示两点间不同时刻的不同容量和流量,因此我们要拆点。 如果最短时间是t,就把每个点Vi(包括源点和汇点)拆成Vi0,Vi1,Vi2,……,Vit这t+1个点,这样太空船在t-1时刻从vi出发在t时刻到达Vj就可以表示成Vit-1~~~

zhhx2001的博客 907

curl: (60) SSL certificate problem: unable to get local issuer certificate 错误

今天同事做微信分享时,碰到如下 SSL certificate problem: unable to get local issuer certificate。 的错误信息。 此问题的出现是由于没有配置信任的服务器HTTPS验证。默认,cURL被设为不信任任何CAs,就是说,它不信任任何服务器验证。 因此,这就是浏览器无法通过HTTPs访问你服务器的原因。 解决此报错有2种处

不忘初心,方得始终 10万+

leetcode 6044. 花期内花的数目 —(每日一难day1)

leetcode 周赛 hard

weixin_42051691的博客 1930

Event code: 3006 错误

事件类型: 警告 事件来源: ASP.NET 2.0.50727.0 事件种类: Web Event 事件 ID: 1310 日期: 2008-10-05 事件: 16:20 用户: N/A 计算机: LQ-5-209 描述: Event code: 3006 Event message: A parser error has occurred. Event ti...

weixin_30254435的博客 1071

【SLAM中的问题相关解决方案】

SLAM在运行中的问题问题一安装gtest参考官方的安装文档。

江边小客的博客 812

电脑管理中显卡出现CODE43问题

最近突然发现原来右键radeon设置不见了,在电脑win搜索了半天AMD字眼都没有结果意识到不对劲。打开【电脑】-【管理】-【设备管理器】-【显示适配器】,发现了两个显卡出现黄三角感叹号(也才意识到自己是双显呜呜呜~): 由于我的已经好了,这个是借的图。下面就说说我试过的办法以及最后怎么做的。 1、显卡禁用再启用。。。没用 2、 ...

qq_51035863的博客 6811

【刷题】Leetcode307(树状数组)

树状数组详解见https://blog.youkuaiyun.com/moX980/article/details/107658403 Leetcode307 题目分析:典型的树状数组 ps: 树状数组下标从1开始 lowbit(0) = 0 没有意义 而题目给出的数组是从0开始,所以要做转换 update时直接更新的是数值 不是变化量 所以要记录原始数组便于求变化量 #define lowbit(x) ((x) & (-x)) class NumArray { private: vector&

moX980的博客 346

391. 完美矩形

给你一个数组 rectangles ,其中 rectangles[i] = [xi, yi, ai, bi] 表示一个坐标轴平行的矩形。这个矩形的左下顶点是 (xi, yi) ,右上顶点是 (ai, bi) 。 如果所有矩形一起精确覆盖了某个矩形区域,则返回 true ;否则,返回 false 。 classSolution: defisRectangleCover(self,rectangles:List[List[int]])->bool: area,...

weixin_43498998的博客 324

LeetCode刷题Python之391. 完美矩形

给你一个数组 rectangles ,其中 rectangles[i] = [xi, yi, ai, bi] 表示一个坐标轴平行的矩形。这个矩形的左下顶点是 (xi, yi) ,右上顶点是 (ai, bi) 。 如果所有矩形一起精确覆盖了某个矩形区域,则返回 true ;否则,返回 false 。 示例 1: 输入:rectangles = [[1,1,3,3],[3,1,4,2],[3,2,4,4],[1,3,2,4],[2,3,3,4]] 输出:true 解释:5 个矩形一起可以精..

qq_55625579的博客 1026

【LeetCode每日一题】391. 完美矩形

目录 题目 一、解题思路 二、使用步骤 1.注意点 2.Java代码 总结 题目 给你一个数组 rectangles ,其中 rectangles[i] = [xi, yi, ai, bi] 表示一个坐标轴平行的矩形。这个矩形的左下顶点是 (xi, yi) ,右上顶点是 (ai, bi) 。 如果所有矩形一起精确覆盖了某个矩形区域,则返回 true ;否则,返回 false 。 示例 1: 输入:rectangles = [[1,1,3,3],[3,1,4,2],[3,2,4,4],[

weixin_44366329的博客 838

leetcode1725 可以形成最大正方形的矩形数目 easy

题目: 给你一个数组 rectangles ,其中 rectangles[i] = [li, wi] 表示第 i 个矩形的长度为 li 、宽度为 wi 。 如果存在 k 同时满足 k <= li 和 k <= wi ,就可以将第 i 个矩形切成边长为 k 的正方形。例如,矩形 [4,6] 可以切成边长最大为 4 的正方形。 设 maxLen 为可以从矩形数组 rectangles 切分得到的 最大正方形 的边长。 请你统计有多少个矩形能够切出边长为 maxLen 的正方形,并返回矩形 数

谜底的博客 798
上一篇: leetcode 460: LFU缓存
下一篇: leetcode 206、24:链表相关习题
coding_diamond
博客等级 码龄8年 8粉丝 131原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值