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

Leetcode 3143. 正方形中的最多点数(二分、数组字符串、位运算集合)

 方法一:二分答案(+ 位运算集合)

class Solution {
public:// 二分答案 顶多O(NlogN),logn去找最后的答案, n用来确定本次找的答案是否正确int maxPointsInsideSquare(vector<vector<int>>& points, string s) {int res = 0;auto check = [&](long long m) -> bool{    // 传入的m是边长, 如果合法返回点数unordered_set<char> hash;   // hash.clear();bool fg = true;             for(int i = 0; i < points.size(); i ++){// 如果在正方形中就将对应标识加入到set中(并检查set中是否已经重复)int x = points[i][0], y = points[i][1];if(x <= m / 2 && x >= -m / 2 && y <= m / 2 && y >= -m / 2){if(hash.count(s[i])){fg = false;break;}elsehash.insert(s[i]);}}if (fg) {res = hash.size();  return fg;  // 不要直接return hash.size()否则有可能为0会与fg=0的情况搞混...}return fg;};long long l = 0, r = 2e9;     // 边长的最大值while (l < r){long long mid = (l + r + 1) >> 1;   // 可能会爆int,比如l=1e9,r=2e9就爆了if(check(mid))  l = mid;else            r = mid - 1;}return res;}
};

0x3f针对我代码set的优化(位运算)

auto check = [&](int size) -> bool {int vis = 0;for (int i = 0; i < points.size(); i++) {// 判断点是否在正方形中if (abs(points[i][0]) <= size && abs(points[i][1]) <= size) {char c = s[i] - 'a';if (vis >> c & 1) { // c 在集合中return false;}vis |= 1 << c; // 把 c 加入集合}}ans = __builtin_popcount(vis);return true;

方法二:维护次小距离的最小值

“针对每个字符维护出最小的距离,在遍历的过程中,维护出全局最小的“次小切比雪夫距离””,这对于确定最多有几个合法点至关重要。

class Solution {
public:int maxPointsInsideSquare(vector<vector<int>>& points, string s) {vector<int> min1(26, 1e9 + 1);  // 最小切比雪夫距离int min2 = 1e9 + 1;             // 全局最小的"次小切比雪夫距离"int res = 0;for(int i = 0; i < points.size(); i ++){int x = points[i][0], y = points[i][1], c = s[i] - 'a';int d = max(abs(x), abs(y));if(d < min1[c]){min2 = min(min2, min1[c]);  // 该字符的最小切比雪夫距离已经更新,min2也应该检查更新min1[c] = d;                // 更新最小切比雪夫距离}else if(d < min2){             // 进入次循环,说明距离不会更新到最小min1,但还是有可能会更新到min2min2 = min(min2, d);}    }for(int i = 0; i < 26; i ++)if(min1[i] < min2)  res ++;return res;}
};

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 函数function3
  • 解决Firefox代理身份验证弹出窗口问题:C#和Selenium实战指南
  • 量化金融人都在看哪些顶刊
  • C#--DirectShowLib 关闭自动白平衡和自动曝光时间
  • MATLAB基础操作(二)
  • Vue Router 详解:让你的单页面应用(SPA)畅行无阻
  • Flink 实时数仓(五)【DWD 层搭建(三)交易域事实表】
  • 数据结构与算法 - 优先级队列、阻塞队列
  • 我对于内存相关的三个问题的理解和总结——内存泄漏、内存溢出、野指针
  • 宏景eHR /ajax/ajaxService SQL注入漏洞复现
  • 【时时三省】unity test 测试框架 使用 code blocks 移植
  • 如何解决C#字典的线程安全问题
  • 40.组合综合Ⅱ
  • 【JavaEE精炼宝库】 网络编程套接字——UDP业务逻辑 | TCP流套接字编程及业务逻辑实现
  • 沉浸式企业VR展厅,重塑企业形象展示方式!
  • ----------
  • 【402天】跃迁之路——程序员高效学习方法论探索系列(实验阶段159-2018.03.14)...
  • CSS进阶篇--用CSS开启硬件加速来提高网站性能
  • happypack两次报错的问题
  • JavaScript服务器推送技术之 WebSocket
  • JavaWeb(学习笔记二)
  • JS学习笔记——闭包
  • mac修复ab及siege安装
  • Mocha测试初探
  • Rancher如何对接Ceph-RBD块存储
  • RxJS 实现摩斯密码(Morse) 【内附脑图】
  • SQLServer之创建数据库快照
  • VirtualBox 安装过程中出现 Running VMs found 错误的解决过程
  • 分布式熔断降级平台aegis
  • 工作中总结前端开发流程--vue项目
  • 如何选择开源的机器学习框架?
  • 如何抓住下一波零售风口?看RPA玩转零售自动化
  • 使用SAX解析XML
  • 2017年360最后一道编程题
  • python最赚钱的4个方向,你最心动的是哪个?
  • ​Linux·i2c驱动架构​
  • #define用法
  • #Linux(Source Insight安装及工程建立)
  • (07)Hive——窗口函数详解
  • (4)Elastix图像配准:3D图像
  • (done) 两个矩阵 “相似” 是什么意思?
  • (附源码)spring boot建达集团公司平台 毕业设计 141538
  • (论文阅读笔记)Network planning with deep reinforcement learning
  • (十)c52学习之旅-定时器实验
  • (十五)使用Nexus创建Maven私服
  • (一)eclipse Dynamic web project 工程目录以及文件路径问题
  • (转)EXC_BREAKPOINT僵尸错误
  • (转)创业家杂志:UCWEB天使第一步
  • .bat批处理(八):各种形式的变量%0、%i、%%i、var、%var%、!var!的含义和区别
  • .NET Core SkiaSharp 替代 System.Drawing.Common 的一些用法
  • .Net CoreRabbitMQ消息存储可靠机制
  • .NET 线程 Thread 进程 Process、线程池 pool、Invoke、begininvoke、异步回调
  • .NET 中选择合适的文件打开模式(CreateNew, Create, Open, OpenOrCreate, Truncate, Append)
  • .NET运行机制
  • /*在DataTable中更新、删除数据*/