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

[M二分] lc3143. 正方形中的最多点数(二分答案+代码实现+模拟)

文章目录

    • 1. 题目来源
    • 2. 题目解析

1. 题目来源

链接:3143. 正方形中的最多点数

2. 题目解析

模拟是一个比较常见的思路,代码写的也算顺利吧,有一些条件没有考虑清楚,WA 4 次… 有点可惜。
模拟重点:

  • 针对重复的点,需要用双指针的思想进行判断并剔除哈,不然只用下标 i 会少判断很多点。

在这里重点看看如何 二分答案 吧,一些有经验的选手,第一反映反而是 二分答案。题感较差,在本题并没有采用:

  • 边长越长,我们能够纳入的点会越多。越多肯定是对我们情况越有利。
  • 当边长内存在重复点时,说明需要一个更短的边,避免重复。
  • 综上,可以直接对边长进行 二分答案,找到一个最大的、满足正方形内无重复点的正方形即可。

二分答案是一种算法思维哈,着重关注下。


  • 时间复杂度 O ( n l o g n ) O(nlogn) O(nlogn)
  • 空间复杂度 O ( n ) O(n) O(n)

模拟写法:

class Solution {
public:int maxPointsInsideSquare(vector<vector<int>>& points, string s) {int n = points.size();vector<pair<int, char>> l(n);for (int i = 0; i < n; i ++ ) l[i] = {max(abs(points[i][0]), abs(points[i][1])), s[i]};sort(l.begin(), l.end());int res = 0;set<char> S;for (int i = 0; i < n; i ++ ) {int x = l[i].first;char c = l[i].second;if (S.count(c)) return i;S.insert(c);int j = i + 1;while (j < n && x == l[j].first) {char c = l[j].second;if (S.count(c)) return i;S.insert(c);j ++ ;}i = j - 1;}return n;}
};

二分答案:

class Solution {
public:int getPoints(vector<vector<int>>& points, string& s, int r) {int cnt = 0;int n = points.size();set<char> S;for (int i = 0; i < n; i ++ ) {int x = max(abs(points[i][0]), abs(points[i][1]));if (x > r) continue;    // 如果边长超出了可提供的范围,则直接 continue 即可char c = s[i];          // 边长内包含的点,均不可重复if (S.count(c)) return -1;  // 重复了,边长需要进一步缩小cnt ++ ;S.insert(c);}return cnt; // 未重复,边长可进一步扩大}int maxPointsInsideSquare(vector<vector<int>>& points, string s) {int l = 0, r = 1e9; // 以正方形所有的边界可取范围作为二分范围while (l < r) {     // 整数二分模版int mid = l + r + 1 >> 1;if (getPoints(points, s, mid) >= 0) l = mid; // 如果当前的边长能获取到不重复的点,则进一步扩大边长即可else r = mid - 1; // 有冲突的点,则需要缩小范围}// 最终输出最大边长的点的个数return getPoints(points, s, l);}
};

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 19066 第K小子串
  • 将后台传来的数据,转成easyui-tree所需格式
  • Map遍历 32
  • 家用仪器血压测量仪电子方案
  • Centos 8使用空磁盘扩展ext4文件类型根分区 (LVM)
  • 代码随想录算法训练营第十七天 | 654.最大二叉树, 617.合并二叉树 ,700.二叉搜索树中的搜索 , 98.验证二叉搜索树
  • 在 Windows 10 系统上部署 Medusa
  • 检索增强生成RAG系列10--RAG的实际案例
  • Modbus 协议详解
  • 一款有趣的工具,锁定鼠标键盘,绿色免安装
  • 【Matplotlib】在 ax(Axes 对象)上使用 seaborn(简称 sns)绘图
  • Meta最新SAM2模型开源直接封神
  • 计算机技术基础 (bat 批处理)Note5
  • CSS平面转换-旋转
  • NumPy 基础教程
  • (ckeditor+ckfinder用法)Jquery,js获取ckeditor值
  • @jsonView过滤属性
  • [译] 理解数组在 PHP 内部的实现(给PHP开发者的PHP源码-第四部分)
  • 【技术性】Search知识
  • CentOS 7 修改主机名
  • gitlab-ci配置详解(一)
  • java取消线程实例
  • js中的正则表达式入门
  • mongodb--安装和初步使用教程
  • React+TypeScript入门
  • Spark VS Hadoop:两大大数据分析系统深度解读
  • Spring声明式事务管理之一:五大属性分析
  • Terraform入门 - 1. 安装Terraform
  • vue从入门到进阶:计算属性computed与侦听器watch(三)
  • -- 查询加强-- 使用如何where子句进行筛选,% _ like的使用
  • 从零开始在ubuntu上搭建node开发环境
  • 近期前端发展计划
  • 如何在GitHub上创建个人博客
  • 正则表达式-基础知识Review
  • ​探讨元宇宙和VR虚拟现实之间的区别​
  • #QT项目实战(天气预报)
  • #基础#使用Jupyter进行Notebook的转换 .ipynb文件导出为.md文件
  • $NOIp2018$劝退记
  • (3)(3.2) MAVLink2数据包签名(安全)
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (day6) 319. 灯泡开关
  • (Forward) Music Player: From UI Proposal to Code
  • (二)c52学习之旅-简单了解单片机
  • (二)Pytorch快速搭建神经网络模型实现气温预测回归(代码+详细注解)
  • (附源码)ssm户外用品商城 毕业设计 112346
  • (三) prometheus + grafana + alertmanager 配置Redis监控
  • (图文详解)小程序AppID申请以及在Hbuilderx中运行
  • (原創) 如何將struct塞進vector? (C/C++) (STL)
  • (转)fock函数详解
  • (转)Oracle存储过程编写经验和优化措施
  • .NET 4 并行(多核)“.NET研究”编程系列之二 从Task开始
  • .NET 4.0中的泛型协变和反变
  • .Net Core 中间件验签
  • .net framework 4.8 开发windows系统服务
  • .NET/C# 使用 ConditionalWeakTable 附加字段(CLR 版本的附加属性,也可用用来当作弱引用字典 WeakDictionary)