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

【leetcode详解】正方形中的最多点数【中等】(C++思路精析)

思路精析:

自定义结构体解读:

一个点是否在题给正方形中,只取决于其横纵坐标的最大值,记为dis

沟通二位数组points和字符串s的桥梁,就是这个点的序号,记为idx

由此自定义结构体,储存dis 和idx

//其中bool operator部分的功能:重载小于操作符“<”, 使sort(vc.begin(), vc.end());按dis值升序排列

struct Node{int dis; int idx;bool operator<(const Node& other)const{return dis < other.dis;}
};
vector<Node>vc;

集合set的使用解释:

//笔者感觉,对于需要检验重复的问题,这是一种很经典的操作

set<int>st;
if(st.count(s[vc[i].idx]))
{if(cur_dis != vc[i].dis) re+=cur;return re;
} 
else st.insert(s[vc[i].idx]);

初始化:

int maxPointsInsideSquare(vector<vector<int>>& points, string s) {int x, y, sz = points.size();Node t_node;for(int i=0; i<sz; i++){int dis = max(abs(points[i][0]), abs(points[i][1]));t_node.dis = dis;t_node.idx = i;vc.push_back(t_node);}sort(vc.begin(), vc.end());
}

补充说明

用re记录总点数,用cur记录当前dis记录的点的个数

只有在dis相同的点全部符合要求时,才将其加到re上

re += cur

int re = 0, cur = 0, cur_dis=-1;
for(int i=0; i<sz; i++)
{if(st.count(s[vc[i].idx])){if(cur_dis != vc[i].dis) re+=cur;return re;} else st.insert(s[vc[i].idx]);if(cur_dis != vc[i].dis){re += cur;cur = 1;cur_dis = vc[i].dis;}else cur++;
}
return re+cur;

//在上述思路基础上,通过不断调试,见到了更多测试数据,由此进一步完善细节

AC代码见下:

class Solution {
private:struct Node{int dis; int idx;bool operator<(const Node& other)const{return dis < other.dis;}};vector<Node>vc;set<char>st;
public:int maxPointsInsideSquare(vector<vector<int>>& points, string s) {int x, y, sz = points.size();Node t_node;for(int i=0; i<sz; i++){int dis = max(abs(points[i][0]), abs(points[i][1]));t_node.dis = dis;t_node.idx = i;vc.push_back(t_node);}sort(vc.begin(), vc.end());int re = 0, cur = 0, cur_dis=-1;for(int i=0; i<sz; i++){if(st.count(s[vc[i].idx])){if(cur_dis != vc[i].dis) re+=cur;return re;} else st.insert(s[vc[i].idx]);if(cur_dis != vc[i].dis){re += cur;cur = 1;cur_dis = vc[i].dis;}else cur++;}return re+cur;}
};

~ 希望对你有启发 ~

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • windows 10下,修改ubuntu的密码
  • 【LeetCode】54. 螺旋矩阵
  • 自动回复的AI小助手,人工智能还是人工智障
  • MTK Android 12 Clone Project 克隆项目
  • 清华和字节联合推出的视频理解大模型video-SALMONN(ICML 2024)
  • heapq.heapify构建小顶堆的流程
  • 电脑新加的硬盘如何分区?新加硬盘分区选MBR还是GPT
  • ⭕️【论文阅读】《Interactive Class-Agnostic Object Counting》
  • Spring-包扫描
  • Go sdk下载和配置环境变量
  • 60、PHP 实现 单词查找树算法
  • M.2接口
  • STM32 GPIO 模块
  • VsCode无法远程调试
  • 如何理解供应链控制塔?详解供应链控制塔类型与架构!
  • 「译」Node.js Streams 基础
  • ES6系列(二)变量的解构赋值
  • If…else
  • SQLServer之创建数据库快照
  • vue.js框架原理浅析
  • XForms - 更强大的Form
  • 表单中readonly的input等标签,禁止光标进入(focus)的几种方式
  • 程序员最讨厌的9句话,你可有补充?
  • 动手做个聊天室,前端工程师百无聊赖的人生
  • 翻译--Thinking in React
  • 排序(1):冒泡排序
  • 前端相关框架总和
  • 如何优雅的使用vue+Dcloud(Hbuild)开发混合app
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • 用 Swift 编写面向协议的视图
  • 用 vue 组件自定义 v-model, 实现一个 Tab 组件。
  • 不要一棍子打翻所有黑盒模型,其实可以让它们发挥作用 ...
  • 如何用纯 CSS 创作一个菱形 loader 动画
  • ​​​【收录 Hello 算法】9.4 小结
  • ​ubuntu下安装kvm虚拟机
  • # .NET Framework中使用命名管道进行进程间通信
  • # include “ “ 和 # include < >两者的区别
  • # 手柄编程_北通阿修罗3动手评:一款兼具功能、操控性的电竞手柄
  • #mysql 8.0 踩坑日记
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • (02)Unity使用在线AI大模型(调用Python)
  • (4) PIVOT 和 UPIVOT 的使用
  • (8)STL算法之替换
  • (android 地图实战开发)3 在地图上显示当前位置和自定义银行位置
  • (C#)Windows Shell 外壳编程系列4 - 上下文菜单(iContextMenu)(二)嵌入菜单和执行命令...
  • (纯JS)图片裁剪
  • (二)十分简易快速 自己训练样本 opencv级联lbp分类器 车牌识别
  • (翻译)Quartz官方教程——第一课:Quartz入门
  • (附源码)php投票系统 毕业设计 121500
  • (黑马出品_高级篇_01)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (四)activit5.23.0修复跟踪高亮显示BUG
  • (四)JPA - JQPL 实现增删改查
  • (算法)N皇后问题
  • (转)程序员技术练级攻略