LeetCode——3143. 正方形中的最多点数
通过万岁!!!
- 题目:给你一个n*2的数组,然后第i行表示第i个点的坐标,然后还给你了一个字符串s,s[i]则表示第i个点的名称。然后让你找一个中心是(0,0)的正方形,正方形中尽可能包含多的点,但是里面的点的名称不能重复。即所有的点不存在s[i]=s[j]的情况。
- 思路:下面的点我们先都以第一象限来考虑,然后写代码的时候加个绝对值就好了。首先是构建一个map,然后key是名称,value是点的list。如果list的长度大于1,就对list进行排序,排序的规则就是坐标轴(x或者y)最大的那个点在后面,即切比雪夫距离,也就是max(|x|,|y|)。然后我们找正方形边长的一半(这里叫他minWidth)就好了,因为这个list的长度大于1,我们要让正方形尽可能的大,list是排序过的,所以不包含第二点(暂记为(a,b))就好了,也就是minWidth=max(a,b)-1,但是minWidth还要与之前的minWidth取最小值,所以最终公式为minWidth=max(minWidth,max(a,b)-1)。拿到宽度以后我们再遍历map,然后记录有多少个点再minWidth的范围之内就好了。
- 进阶思路:我的代码时间复杂度有点高,因为涉及到了排序。然后我看了下网上大佬们的思路,其实不用排序的,我们只需要遍历字符串,找到s[i]的这些点中,第二小的切比雪夫距离。
- 技巧:排序
java代码
class Solution {public int maxPointsInsideSquare(int[][] points, String s) {Map<Character, List<int[]>> map = new HashMap<>();for (int i = 0; i < s.length(); i++) {List<int[]> list = map.getOrDefault(s.charAt(i), new ArrayList<>());list.add(points[i]);map.put(s.charAt(i), list);}// 对list进行排序int minWidth = Integer.MAX_VALUE;for (Map.Entry<Character, List<int[]>> entry : map.entrySet()) {List<int[]> value = entry.getValue();if (value.size() >= 2) {// 坐标最大的那个放在后面value.sort(Comparator.comparingInt(o -> Math.max(Math.abs(o[0]), Math.abs(o[1]))));// 获取第二个点int[] point = value.get(1);// 不能包含第二个点minWidth = Math.min(minWidth, Math.max(Math.abs(point[0]), Math.abs(point[1])) - 1);}}int ret = 0;for (Map.Entry<Character, List<int[]>> entry : map.entrySet()) {List<int[]> value = entry.getValue();int[] point = value.getFirst();if (Math.abs(point[0]) <= minWidth && Math.abs(point[1]) <= minWidth) {ret++;}}return ret;}
}
java代码——进阶
class Solution {public int maxPointsInsideSquare(int[][] points, String s) {Map<Character, Integer> map = new HashMap<>();// 正方形的宽度的一半int minWidth = Integer.MAX_VALUE;for (int i = 0; i < s.length(); i++) {int temp = Math.max(Math.abs(points[i][0]), Math.abs(points[i][1]));// s[i]的宽度Integer siWidth = map.getOrDefault(s.charAt(i), Integer.MAX_VALUE);if (temp < siWidth) {// 因为已经有比siWidth小的点了,siWidth可能是第二小的点minWidth = Math.min(minWidth, siWidth);// 当前这个点的坐标会更小,我们要保留这个点map.put(s.charAt(i), temp);} else if (temp < minWidth) {// temp这个可能是不是s[i]中更小的,但是他比minWidth小minWidth = temp;}}int ret = 0;for (Map.Entry<Character, Integer> entry : map.entrySet()) {if (entry.getValue() < minWidth) {ret++;}}return ret;}
}
- 总结:题目还是有点难度的,主要是这里的切比雪夫距离。
相关文章:
LeetCode——3143. 正方形中的最多点数
通过万岁!!! 题目:给你一个n*2的数组,然后第i行表示第i个点的坐标,然后还给你了一个字符串s,s[i]则表示第i个点的名称。然后让你找一个中心是(0,0)的正方形,…...
const重新赋值的问题
问: const haveNextPage false; // 默认没有下一页fetch(historyFullUrl).then(data > {haveNextPage data.data.has_more;这段代码有什么问题吗? 回答: 在你的代码中,有一个潜在的问题涉及到 haveNextPage 的赋值。你定义了 haveNextPage 作为一个常量&am…...
python开发上位机 - PyCharm环境搭建、安装PyQt5及工具
目录 简介: 一、安装PyCharm 1、下载 PyCharm 2、PyCharm安装 1)配置安装目录 2)安装选项 3、问题及解决方法 二、安装PyQt5 1、打开 Pycharm,新建 Project 2、安装 pyqt5 3、安装很慢怎么办? 4、安装 pyq…...
day02-安装虚拟机
1. 安装配置 前面一直下一步就OK 2. 虚拟机操作系统配置 语言 中文 软件安装: 最小安装,标准,调试工具,开发工具,系统工具,man手册 网络和主机名配置 主机名,自己起名字 网络配置 常规 &g…...
Qt:线程
一个Qt窗口生成后,为什么拖动窗口,窗口可以随着鼠标移动或放大缩小 因为对窗口操作后,都有对应的事件产生,Qt在其框架中对这些事件进行了默认处理 一个Qt程序默认只有一个线程,称为主线程(也叫ui线程&#…...
VisionPro二次开发学习笔记11-使用 Caliper和Fixture定位Blob工具检测方块
该示例演示了如何使用卡尺工具和夹具工具来固定 Blob 工具。示例代码将检测图像上部区域中小方块的存在。当点击“运行”按钮时,将读取一张新图像。卡尺工具将被运行,卡尺工具的输出 Y 信息将传递给夹具工具。夹具工具使用来自卡尺工具的 Y 信息和新图像…...
高翔【自动驾驶与机器人中的SLAM技术】学习笔记(五)卡尔曼滤波器一:认知卡尔曼滤波器;协方差矩阵与方差;
卡尔曼滤波器 为了研究卡尔曼,我阅读了大量博文。不敢说完全吃透,但是在做一件什么事,可以通过下面这文章来理解,我读了不下五遍。并整理标准重点,添加自己的一些见解。 自动驾驶传感器融合算法 - 自动驾驶汽车中的激…...
【Go】通过反射解析对象tag信息,实现简易ORM
反射是运行时,需要在运行时解析类型信息,编译期无法优化这些操作,因此比编译时已知类型信息的直接调用效率要低。 package mainimport ("fmt""reflect""strings" )type Person struct {Name string json:&quo…...
gemini2相机和宇树雷达L1的使用注意点
gemini2相机: 官方资料:Gemini2深度相机 (yahboom.com) 目前深度这一块智能提供某一点的深度数据,没有提供某一点的世界坐标,虽然网上有文章说是可以计算 已知深度图,获得某个像素点的三维坐标_深度图如何知道特征点的3d坐标-CS…...
FPGA开发——verilog随机涵数$random的使用方法
一、概述 我们进行FPGA开发的过程中在做仿真的时候,难免会需要一些数据作为输入。有的时候需要输入大量的数据对于设计结果进行一个验证,如果逐个去进行输入,就需要花费大量的时间。这种情况下我们通常会想到使用随机数。随机数在我们的日常…...
Android14 WPA2和WPA3 类型的WiFi网络连接
Android14 WPA2和WPA3 类型的WiFi网络连接 文章目录 Android14 WPA2和WPA3 类型的WiFi网络连接一、前言二、源码分析1、Android原生Settings 连接WPA 和WPA3 网络的配置代码 三、其他1、WPA/WPA2和WPA3连接小结2、WPA配置无法连接WPA3的网络的情况Android11 Wifi 加密类型详解 …...
24/8/5算法笔记 逻辑回归sigmoid
今日是代码对sigmoid函数的实现和运用 #linear_model线性回归 #名字虽然叫逻辑回归,作用于分类 #分类:类别 #回归:预测 from sklearn.linear_model import LogisticRegression 实现函数 import numpy as np import matplotlib.pyplot as pl…...
适用于验证码的OCR,识别快速,使用简单!
环境 windows 11python 3.9 前言 Muggle OCR 是一个高效本地 OCR 模块,旨在通过简单的几步设置提供强大的文本识别功能,无论是在处理印刷文本还是解析验证码,都能让用户在工作中畅通无阻。Muggle OCR 易于安装和使用,支持双模型&a…...
超简单适合练手的双指针题:判断子序列
给定字符串 s 和 t ,判断 s 是否为 t 的子序列。 字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列&#…...
打破老美垄断,潘展乐商业价值起飞
文|琥珀食酒社 作者 | 积溪 奥运会上的潘展乐 真是牛逼坏了 拿下男子100米自由游金牌 打破欧美长达近百年垄断 搞定男子4x100米混合泳金牌 终结了美国在这项目上 10年不败的神话 比赛前 美国选手对他爱答不理 招呼都不打 比赛后美国选手想套热乎 潘展乐…...
java面试题:简化URL
1 问题场景 编写一种方法,将字符串中的空格全部替换为%20。假定该字符串尾部有足够的空间存放新增字符,并且知道字符串的“真实”长度。 注意:字符串长度在 [0, 500000] 范围内。 2 答案 2.1 解决方案一 直接使用String方法解决 public s…...
用 echarts 开发地图、点击展示自定义信息框
1、下载所需地市的json 链接:DataV.GeoAtlas地理小工具系列 在右侧输入需要的名称,然后下载json文件到本地 2、在html 中准备容器,并设置宽高 <div id"mapContent"> <div ref"mapChart" style"width:10…...
Android 应用兼容性变更调试
引言 本文将介绍如何调试和解决这些兼容性问题,并记录调试过程中实际操作的步骤和方法。在Android应用开发中,随着Android系统版本的不断更新,应用的兼容性问题变得越来越复杂。 推荐:《Android系统开发中高级定制专栏导读》08-03 16:04:53.518 6555 6555 D Compatibili…...
76 多态
多态(polymorphism)是指基类的同一个方法在不同派生类对象中具有不同的表现和行为。 派生类继承了基类的行为和属性之后,还会增加某些特定的行为和属性,同时还可能会对继承来的某些行为进行一定的改变,这都是多态的表现…...
数据采集工具之Canal
本文主要介绍canal采集mysql数据的tcp、datahub(kafka)模式如何实现 1、下载canal https://aliyun-datahub.oss-cn-hangzhou.aliyuncs.com/tools/canal.deployer-1.1.5-SNAPSHOT.tar.gz canal的原理类似于mysql的主从复制,canal模拟的是从节点拉取主节点的binlog数…...
新手必看:在快马平台体验openclaw切换模型的入门实践
今天想和大家分享一个特别适合AI开发新手的实践项目——在InsCode(快马)平台体验openclaw切换模型的操作。作为一个刚接触AI开发不久的人,我发现这个平台真的能让人快速理解模型切换的核心概念,下面就把我的实践过程记录下来。 项目背景理解 刚开始接触A…...
awesome-ai-resources部署指南:如何高效组织个人AI学习资料库
awesome-ai-resources部署指南:如何高效组织个人AI学习资料库 【免费下载链接】awesome-ai-resources Learn AI and LLMs from scratch using free resources 项目地址: https://gitcode.com/gh_mirrors/aw/awesome-ai-resources 想要系统学习人工智能和大型…...
YamlDotNet类型推断:智能处理复杂对象图的完整指南
YamlDotNet类型推断:智能处理复杂对象图的完整指南 【免费下载链接】YamlDotNet YamlDotNet is a .NET library for YAML 项目地址: https://gitcode.com/gh_mirrors/ya/YamlDotNet YamlDotNet是一个功能强大的.NET库,专为处理YAML数据格式而设计…...
ESP8266与STM32F103通信实战:从硬件连接到软件调试的完整解析
1. ESP8266与STM32F103通信基础 搞物联网开发的朋友应该都听说过ESP8266这个神器,它就像给传统单片机装上了Wi-Fi翅膀。我最早用STM32F103做项目时,为了联网功能折腾了好久,直到发现ESP-01S模块这个性价比之王。今天我就把这两者的通信实战经…...
避开这3个坑!用Llama-7B低成本部署InteRecAgent的完整指南
低成本部署InteRecAgent的三大误区与实战解决方案 1. 从开源小模型到商业级应用的鸿沟 许多技术团队在尝试构建交互式推荐系统时,往往陷入"拿来即用"的思维陷阱。面对Llama-7B这类开源小模型,最常见的三个认知误区包括:认为预训练模…...
7π/6 与 π/6 的关系
参考角(Reference Angle)的解释:7π/6 与 π/6 的关系 这在三角函数中非常重要,尤其是计算 sin、cos、tan 等值时。让我一步步解释清楚,特别是为什么 7π/6 的参考角是 π/6,以及它们之间的关系。整个解释…...
用快马平台十分钟复刻lostlife:快速构建你的首个交互式游戏原型
最近想尝试做个简单的交互式游戏原型,正好看到InsCode(快马)平台可以快速生成项目代码,就试了试复刻类似lostlife的玩法。整个过程比想象中顺利,分享下我的实现思路: 确定核心交互逻辑 游戏的核心是点击角色触发反馈,所…...
BilibiliDown:跨平台B站视频下载器的完整使用指南
BilibiliDown:跨平台B站视频下载器的完整使用指南 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.com/gh_mirrors/bi/Bi…...
3个步骤掌握macOS自动点击器:彻底告别重复鼠标操作的完整方案
3个步骤掌握macOS自动点击器:彻底告别重复鼠标操作的完整方案 【免费下载链接】macos-auto-clicker A simple auto clicker for macOS Big Sur, Monterey, Ventura, Sonoma and Sequoia. 项目地址: https://gitcode.com/gh_mirrors/ma/macos-auto-clicker 你…...
超立方体可视化背后的数学原理:Processing实现详解
超立方体可视化背后的数学原理:Processing实现详解 想象一下,当你第一次看到超立方体的三维投影时,那种既熟悉又陌生的感觉——它像是我们熟知的立方体,却又在某种更高维度上展开。这种四维几何体在三维空间的投影,不仅…...
