【差分数组】个人练习-Leetcode-2249. Count Lattice Points Inside a Circle

题目链接:https://leetcode.cn/problems/count-lattice-points-inside-a-circle/description/

题目大意:给出一系列圆的圆心坐标和半径,求在这些圆内部(边缘也算)的格点的数量。

思路:简单的思路就是暴力遍历。稍微优化一下,就是缩小一下范围,确定x, y坐标的上下限。通过是能通过,但复杂度还是 O ( N 3 ) O(N^3) O(N3)左右。

看题解学到了差分数组法:
对每一个纵坐标 y y y,画一条横线,对于一个圆如过经过内部点,必然从左到右穿过两个横坐标 x 1 , x 2 x_1, x_2 x1,x2(在圆上的情况就是 x 1 = x 2 x_1=x_2 x1=x2)。

那么就对这个 y y y坐标的差分数组,经过左端点时+1,经过右端点时-1。那么之后只需要遍历 x x x坐标,保留一个和cur,当cur > 0时就在圆内。我们可以让 x 2 x_2 x2都往右偏移一位,这样对于在圆上的情况也能保证计算在内。

完整代码

class Solution {
public:int countLatticePoints(vector<vector<int>>& circles) {int maxx = 0, maxy = 0;for (auto ck : circles) {maxx = max(maxx, ck[0] + ck[2]);maxy = max(maxy, ck[1] + ck[2]);}vector<vector<int>> d(maxy+1, vector<int>(maxx+2, 0));for (auto ck : circles) {int x = ck[0], y = ck[1], r = ck[2];for (int j = y+r, i1 = x, i2 = x; j >= y; j--) {while ((i1-x)*(i1-x) + (j-y)*(j-y) <= r*r)i1--;while ((i2-x)*(i2-x) + (j-y)*(j-y) <= r*r)i2++;i1++;d[j][i1]++;d[j][i2]--;}for (int j = y-r, i1 = x, i2 = x; j < y; j++) {while ((i1-x)*(i1-x) + (j-y)*(j-y) <= r*r)i1--;while ((i2-x)*(i2-x) + (j-y)*(j-y) <= r*r)i2++;i1++;d[j][i1]++;d[j][i2]--;}}int res = 0;for (int j = 0; j <= maxy; j++) {for (int i = 0, cur = 0; i <= maxx; i++){cur += d[j][i];if (cur > 0)res++;}}return res;}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/35356.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

专业与学校的终极抉择:如何为未来铺就最佳道路

随着2024年高考的帷幕落下&#xff0c;成千上万的考生开始面临一个全新的挑战&#xff1a;在选择大学和专业的过程中&#xff0c;如何做出最适合自己的决策&#xff1f;每一位高考生都将面对这一重要抉择&#xff0c;这不仅关系到他们的学术生涯&#xff0c;更影响着他们的未来…

前端 CSS 经典:模拟 material 文本框

效果 思路 定义三个元素&#xff0c;文本框&#xff0c;下划线&#xff0c;占位文字。input 聚焦时通过 ~ 选中兄弟元素&#xff0c;利用 required 属性 css 中的 valid 验证&#xff0c;判断 input 中是否有输入。写入过渡效果。 实现代码 <!DOCTYPE html> <htm…

深圳,不止是“搞钱之都”

深圳又结结实实火了一把。 “建议深圳人吃饭不要谈工作”&#xff0c;这条微博话题热度飙升&#xff0c;超过五百多万人围观&#xff0c;引来无数网友吐槽“深圳人饭局的真实写照”。 从高档粤菜包间到路边小摊&#xff0c;从茶餐厅到烧烤摊&#xff0c;深圳人吃饭似乎总绕不…

【RF Transceiver】ADRV9040 THEORY OF OPERATION

工作原理 概述 GENERAL 该 ADRV9040 是一款高度集成的射频收发器&#xff0c;能够针对各种应用进行配置。该器件集成了在单个器件中提供所有发射器、流量接收机和观测接收机功能所需的所有射频、混合信号和数字模块。可编程性使该器件能够适应 TDD 模式下的许多 3G/4G/5G 蜂窝…

2025秋招NLP算法面试真题(十一)-Transformer的并行化

正文 本文主要谈一下关于 Transformer的并行化。文章比较短&#xff0c;适合大家碎片化阅读。 Decoder不用多说&#xff0c;没有并行&#xff0c;只能一个一个的解码&#xff0c;很类似于RNN&#xff0c;这个时刻的输入依赖于上一个时刻的输出。 对于Encoder侧&#xff1a; …

【STM32】USART串口通讯

1.USART简介 STM32芯片具有多个USART外设用于串口通讯&#xff0c;它是 Universal Synchronous Asynchronous Receiver and Transmitter的缩写&#xff0c; 即通用同步异步收发器可以灵活地与外部设备进行全双工数据交换。有别于USART&#xff0c; 它还有具有UART外设(Univers…

淘客返利系统的多租户架构设计

淘客返利系统的多租户架构设计 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 引言 随着电子商务的迅猛发展&#xff0c;淘客返利系统在市场上得到了广泛的应…

Vue2中为啥不用 Object.defineProperty 实现响应式数组 ? 不能监听到数组变化吗?

Vue2.0 对于数据响应式的实现上是有一些局限性的&#xff0c;比如&#xff1a; 无法检测数组和对象的新增&#xff1b; 无法检测通过索引改变数组的操作&#xff1b; 针对以上问题&#xff0c;我们一般都会把锅甩给 Object.defineProperty。所以&#xff0c;在Vue 3.0 中&am…

每天一个数据分析题(三百九十一)- 多元线性回归

在多元线性回归模型中自变量的系数矩阵X为列满秩&#xff0c;则表明矩阵X的列向量之间是什么关系&#xff1f; A. 线性相关 B. 存在多重共线性 C. 线性无关 D. 无法判断 数据分析认证考试介绍&#xff1a;点击进入 题目来源于CDA模拟题库 点击此处获取答案 数据分析专项…

No module named ‘cStringIO‘

No module named cStringIO 解决方法&#xff1a; import io as sio

Linux---- 防火墙

查看防火墙状态 systemctl status firewalld关闭防火墙 systemctl stop firewalld永久关闭防火墙 systemctl stop firewalld systemctl disable firewalld打开防火墙 systemctl start firewalld查看所有已开放的临时端口 firewall-cmd --list-ports查看所有永久开放的端口…

基于Java微信小程序民宿短租系统设计和实现(源码+LW+调试文档+讲解等)

&#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者&#xff0c;博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f31f;文末获取源码数据库&#x1f31f;感兴趣的可以先收藏起来&#xff0c;还…

Mongodb地理信息数据查询

学习mongodb&#xff0c;体会mongodb的每一个使用细节&#xff0c;欢迎阅读威赞的文章。这是威赞发布的第78篇mongodb技术文章&#xff0c;欢迎浏览本专栏威赞发布的其他文章。如果您认为我的文章对您有帮助或者解决您的问题&#xff0c;欢迎在文章下面点个赞&#xff0c;或者关…

K8s部署一个nginx的应用

我们在mster节点上主要有两种部署应用的方式&#xff0c;一个是通过命令行的形式&#xff0c;一个是通过编写yaml文件的形式&#xff0c;类似linux中脚本一样。以下是部署nginx的例子&#xff1a; 一、通过命令行的方式 &#xff1a; 1、部署应用kubectl create deployment ngi…

IDEA中使用leetcode 刷题

目录 1.IDEA下载leetcode插件 2.侧边点开插件 3.打开网页版登录找到cookie复制 4.回到IDEA登录 5.刷题 6.共勉 1.IDEA下载leetcode插件 2.侧边点开插件 3.打开网页版登录找到cookie复制 4.回到IDEA登录 5.刷题 6.共勉 算法题来了不畏惧&#xff0c; 挑战前行是成长的舞台…

qmt量化交易策略小白学习笔记第51期【qmt编程之期货列表--国债期货合约表】

qmt编程之获取期货列表 qmt更加详细的教程方法&#xff0c;会持续慢慢梳理。 也可找寻博主的历史文章&#xff0c;搜索关键词查看解决方案 &#xff01; 期货列表 #金融期货列表 提供当前时间段内有效的金融期货合约数据&#xff08;如行情数据等&#xff09;&#xff0c;…

AI实战案例!如何运用SD完成运营设计海报?玩转Stable Diffusion必知的3大绝技

大家好我是安琪&#xff01; Satble Diffusion 给视觉设计带来了前所未有的可能性和机会&#xff0c;它为设计师提供了更多选择和工具的同时&#xff0c;也改变了设计师的角色和设计流程。然而&#xff0c;设计师与人工智能软件的协作和创新能力仍然是不可或缺的。接下来我将从…

【LinuxC语言】UDP数据收发

文章目录 前言udp流程图udp函数介绍bind函数recvfrom函数sendto函数示例代码总结前言 在计算机网络中,UDP(用户数据报协议)是一种无连接的传输层协议,它允许应用程序快速地发送短的消息或数据报。由于UDP不需要建立和断开连接,因此它的传输速度往往比其他协议更快,但它也…

EfficientNet-V2论文阅读笔记

目录 EfficientNetV2: Smaller Models and Faster Training摘要Introduction—简介Related work—相关工作EfficientNetV2 Architecture Design—高效EfficientNetV2架构设计Understanding Training Efficiency—了解训练效率Training-Aware NAS and Scaling—训练感知NAS和缩放…

1、Python编程入门:从硬件基础到解释器类型

Python是一种免费、开源、跨平台、动态、面向对象的编程语言。它以其简洁易读的语法和强大的功能而闻名&#xff0c;广泛应用于各种领域&#xff0c;如Web开发、数据分析、人工智能等。本文将介绍Python的基本概念、执行方式以及常用的Linux命令&#xff0c;帮助初学者快速入门…