每日一题 2013. 检测正方形

简介: 每日一题 2013. 检测正方形

题:在x-y平面检测可以构成轴对齐正方形的方案数。

要点:1.轴对齐:正方形的边和坐标轴平行。2.平面上同一位置的点可有多个。

解:(参考官方题解)

使用字典嵌套来存储点。{y:{x:数量}}

计算正方形方案时可以枚举y2确定正方形边长abs(y2-y),从而确定正方形的四个点。

class DetectSquares:
 
    def __init__(self):
       self.map = defaultdict(Counter)
       # {y:{x:数量}}
 
 
    def add(self, point: List[int]) -> None:
        x,y = point
        self.map[y][x] += 1
 
 
    def count(self, point: List[int]) -> int:
        #轴对齐正方形数
        res = 0
        x,y = point
        if not y in self.map:
            return 0
        yCnt = self.map[y]  #y对应的x 字典
        #枚举另一个y轴
        for y2,y2Cnt in self.map.items():
            if y2 != y:
                d = y2 - y
                res += y2Cnt[x]  * y2Cnt[x+d] * yCnt[x+d]
                res += y2Cnt[x]  * y2Cnt[x-d] * yCnt[x-d]
        return res
 
 
 
# Your DetectSquares object will be instantiated and called as such:
# obj = DetectSquares()
# obj.add(point)
# param_2 = obj.count(point)

补充:defaultdict() 和Counter

collections --- 容器数据类型 — Python 3.10.2 文档

defaultdict()返回一个类似字典的对象。是dict的子类。

本对象包含一个名为 default_factory 的属性,构造时,第一个参数用于为该属性提供初始值,默认为 None。所有其他参数(包括关键字参数)都相当于传递给 dict 的构造函数。


当无法找到键值时,defaultdict会调用default_factory方法提供默认值。也就是说,等价于


字典的d.setdefault(k, default_factory())

defaultdict例子:

使用 list 作为 default_factory,很轻松地将(键-值对组成的)序列转换为(键-列表组成的)字典:


>>> s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]

>>> d = defaultdict(list)

>>> for k, v in s:

...     d[k].append(v)

...

>>> sorted(d.items())

[('blue', [2, 4]), ('red', [1]), ('yellow', [1, 3])]

当每个键第一次遇见时,它还没有在字典里面,所以自动创建该条目,即调用 default_factory 方法,返回一个空的 list。 list.append() 操作添加值到这个新的列表里。当再次存取该键时,就正常操作,list.append() 添加另一个值到列表中。这比它的等价方法 dict.setdefault() 要快速和简单:


>>>


>>> d = {}

>>> for k, v in s:

...     d.setdefault(k, []).append(v)

...

>>> sorted(d.items())

[('blue', [2, 4]), ('red', [1]), ('yellow', [1, 3])]

设置 default_factory 为 int,使 defaultdict 用于计数(类似其他语言中的 bag 或 multiset):


>>>


>>> s = 'mississippi'

>>> d = defaultdict(int)

>>> for k in s:

...     d[k] += 1

...

>>> sorted(d.items())

[('i', 4), ('m', 1), ('p', 2), ('s', 4)]

当一个字母首次遇到时,它会查询失败,则 default_factory 会调用 int() 来提供一个整数 0 作为默认值。后续的自增操作建立起对每个字母的计数。


Counter

collections --- 容器数据类型 — Python 3.10.2 文档


Counter 是 dict 的子类,用于计数可哈希对象。它是一个集合,元素像字典键(key)一样存储,它们的计数存储为值。


>>> # Tally occurrences of words in a list

>>> cnt = Counter()

>>> for word in ['red', 'blue', 'red', 'green', 'blue', 'blue']:

...     cnt[word] += 1

>>> cnt

Counter({'blue': 3, 'red': 2, 'green': 1})


如果引用的键没有任何记录,就返回一个0,而不是弹出一个 KeyError :


>>> c = Counter(['eggs', 'ham'])

>>> c['bacon']                              # count of a missing element is zero

0


相关文章
|
3月前
|
机器学习/深度学习 数据可视化 数据挖掘
香烟品牌识别和规格识别设计思路
基于YOLOv8实现香烟品牌与规格(条装/单盒装)识别,采用“品牌+规格”组合为60类的复合类别方案,结合充足标注数据(每类300-500张)、数据增强与反例优化,进行端到端联合训练,提升模型在复杂场景下的检测与分类精度。
|
10月前
|
前端开发 Java Nacos
🛡️Spring Boot 3 整合 Spring Cloud Gateway 工程实践
本文介绍了如何使用Spring Cloud Alibaba 2023.0.0.0技术栈构建微服务网关,以应对微服务架构中流量治理与安全管控的复杂性。通过一个包含鉴权服务、文件服务和主服务的项目,详细讲解了网关的整合与功能开发。首先,通过统一路由配置,将所有请求集中到网关进行管理;其次,实现了限流防刷功能,防止恶意刷接口;最后,添加了登录鉴权机制,确保用户身份验证。整个过程结合Nacos注册中心,确保服务注册与配置管理的高效性。通过这些实践,帮助开发者更好地理解和应用微服务网关。
1884 0
🛡️Spring Boot 3 整合 Spring Cloud Gateway 工程实践
|
算法 计算机视觉
图像处理之角点检测算法(Harris Corner Detection)
图像处理之角点检测算法(Harris Corner Detection)
559 3
|
机器学习/深度学习 大数据 计算机视觉
【YOLOv8改进 - 特征融合】 GELAN:YOLOV9 通用高效层聚合网络,高效且涨点
YOLOv8专栏探讨了深度学习中信息瓶颈问题,提出可编程梯度信息(PGI)和广义高效层聚合网络(GELAN),改善轻量级模型的信息利用率。GELAN在MS COCO数据集上表现优越,且PGI适用于不同规模的模型,甚至能超越预训练SOTA。[论文](https://arxiv.org/pdf/2402.13616)和[代码](https://github.com/WongKinYiu/yolov9)已开源。核心组件RepNCSPELAN4整合了RepNCSP块和卷积。更多详情及配置参见相关链接。
|
网络协议 应用服务中间件 数据库
出差在外,远程访问企业局域网象过河ERP系统【内网穿透】
出差在外,远程访问企业局域网象过河ERP系统【内网穿透】
284 1
出差在外,远程访问企业局域网象过河ERP系统【内网穿透】
|
机器学习/深度学习 人工智能 自然语言处理
【AI大模型】Transformers大模型库(二):AutoModelForCausalLM
【AI大模型】Transformers大模型库(二):AutoModelForCausalLM
676 1
|
机器学习/深度学习 数据可视化 算法
生成对抗网络项目:1~5(1)
生成对抗网络项目:1~5(1)
465 0
|
机器学习/深度学习 编解码 算法
又改YOLO | 项目如何改进YOLOv5?这篇告诉你如何修改让检测更快、更稳!!!
又改YOLO | 项目如何改进YOLOv5?这篇告诉你如何修改让检测更快、更稳!!!
1339 0
|
传感器 智能硬件
STM32cubemx配置驱动DHT11模块
STM32cubemx配置驱动DHT11模块
581 0