2024-12-18:正方形中的最多点数。用go语言,给定一个二维数组 points 和一个字符串 s,其中 points[i] 表示第 i 个点的坐标,s[i] 表示第 i 个点的标签。 如果一个正
2024-12-18:正方形中的最多点数。用go语言,给定一个二维数组 points 和一个字符串 s,其中 points[i] 表示第 i 个点的坐标,s[i] 表示第 i 个点的标签。
如果一个正方形的中心在 (0, 0),边与坐标轴平行,并且内部没有标签相同的两个点,则称这个正方形为“合法”的。
你的任务是返回可以被“合法”正方形所包含的最多点数。
注意:
1.如果一个点位于正方形的边上或其内部,则视为在正方形内。
2.正方形的边长可以为零。
1 <= s.length, points.length <= 100000。
points[i].length == 2。
-1000000000 <= points[i][0], points[i][1] <= 1000000000。
s.length == points.length。
points 中的点坐标互不相同。
s 只包含小写英文字母。
答案2024-12-18:
题目来自leetcode3143。
大体步骤如下:
1.创建一个 map 来存储每个标签对应的可能存在的最短距离。
2.遍历给定的每个点和其对应的标签:
计算这个点到 (0, 0) 的距离。
检查是否存在其他标签对应的最短距离小于当前点到 (0, 0) 的距离,并将可能的最短距离更新到 map 中。
3.统计每个标签对应的最短距离,并最终找到可以被“合法”正方形所包含的最多点数。
时间复杂度:假设有 n 个点,则遍历所有点需要 O(n) 的时间复杂度,因此总体时间复杂度是 O(n)。
空间复杂度:使用了一个 map 存储每个标签的最短距离,以及两个长度为 26 的数组来存储最短距离,因此额外空间复杂度为 O(1)。
Go完整代码如下:
package main
import (
"fmt"
)
func maxPointsInsideSquare(points [][]int, s string) int {
min1 := make([]int, 26)
for i := range min1 {
min1[i] = 1000000001
}
min2 := 1000000001
for i, ch := range s {
x, y := points[i][0], points[i][1]
j := int(ch - 'a')
d := max(abs(x), abs(y))
if d < min1[j] {
min2 = min(min2, min1[j])
min1[j] = d
} else if d < min2 {
min2 = d
}
}
res := 0
for _, d := range min1 {
if d < min2 {
res++
}
}
return res
}
func abs(a int) int {
if a > 0 {
return a
}
return -a
}
func main() {
points := [][]int{{2, 2}, {-1, -2}, {-4, 4}, {-3, 1}, {3, -3}}
s := "abdca"
fmt.Println(maxPointsInsideSquare(points, s))
}

Rust完整代码如下:
fn max_points_inside_square(points: Vec<Vec<i32>>, s: &str) -> i32 {
let mut min1: Vec<i32> = vec![1000000001; 26];
let mut min2 = 1000000001;
for (i, ch) in s.chars().enumerate() {
let (x, y) = (points[i][0], points[i][1]);
let j = (ch as u8 - b'a') as usize;
let d = max(x.abs(), y.abs());
if d < min1[j] {
min2 = min2.min(min1[j]);
min1[j] = d;
} else if d < min2 {
min2 = d;
}
}
let mut res = 0;
for &d in &min1 {
if d < min2 {
res += 1;
}
}
res
}
fn max(a: i32, b: i32) -> i32 {
if a > b {
a
} else {
b
}
}
fn main() {
let points = vec![vec![2, 2], vec![-1, -2], vec![-4, 4], vec![-3, 1], vec![3, -3]];
let s = "abdca";
println!("{}", max_points_inside_square(points, s));
}

2024-12-18:正方形中的最多点数。用go语言,给定一个二维数组 points 和一个字符串 s,其中 points[i] 表示第 i 个点的坐标,s[i] 表示第 i 个点的标签。 如果一个正的更多相关文章
- php中向前台js中传送一个二维数组
在php中向前台js中传送一个二维数组,并在前台js接收获取其中值的全过程方法: (1),方法说明:现在后台将数组发送到前台 echo json_encode($result); 然后再在js页面中的 ...
- <转载>c++中new一个二维数组
原文连接 在c++中定义一个二维数组时有多种方式,下面是几种定义方式的说明:其中dataType 表示数据类型,如int byte long... 1.dataType (*num)[n] = n ...
- Java练习小题_求一个3*3矩阵对角线元素之和,矩阵的数据用行的形式输入到计算机中 程序分析:利用双重for循环控制输入二维数组,再将a[i][i]累加后输出。
要求说明: 题目:求一个3*3矩阵对角线元素之和,矩阵的数据用行的形式输入到计算机中 程序分析:利用双重for循环控制输入二维数组,再将 a[i][i] 累加后输出. 实现思路: [二维数组]相关知识 ...
- C#编写程序,找一找一个二维数组中的鞍点
编写程序,找一找一个二维数组中的鞍点(即该位置上的元素值在行中最大,在该列上最小.有可能数组没有鞍点).要求: 1.二维数组的大小.数组元素的值在运行时输入: 2.程序有友好的提示信息. 代码: us ...
- C#中如何获取一个二维数组的两维长度,即行数和列数?以及多维数组各个维度的长度?
如何获取二维数组中的元素个数呢? int[,] array = new int[,] {{1,2,3},{4,5,6},{7,8,9}};//定义一个3行3列的二维数组int row = array. ...
- python 一个二维数组和一个整数,判断数组中是否含有该整数
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序. 请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. de ...
- 找出一个二维数组中的"鞍点",即该位置上的元素在该行中最大,在该列中最小(也可能没有"鞍点"),打印有关信息.(提示:注意特殊情况:没鞍点或多个鞍点)
#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { ][] = {}; ;i < ...
- PHP如何随机获取一个二维数组中的一个值
获取一个数组: $awardid_list=pdo_fetchall('select id from '.tablename($this->table_award)); 这是微擎的写法哈,意思就 ...
- JAVA中如何创建一个二维数组,然后给二维数组赋值!
普通的赋值是:int[][] i = {{1,2,3},{2,3,4},{1,3,4}}; 如果是其他情况可以这样:比如: import java.util.* public class TT(){ ...
- 剑指 Offer 04. 二维数组中的查找
链接:https://leetcode-cn.com/problems/er-wei-shu-zu-zhong-de-cha-zhao-lcof/ 标签:数组.双指针.二分 题目 在一个 n * m ...
随机推荐
- K8S命名空间处于Terminating状态,如何强制删除
一.现象 当删除命名空间后,发现该空间一直处于Terminating状态 [root@imanager-beta-arm-21756-5g5ap ~]# kubectl get ns NAME STA ...
- centos7 nginx+php7yum安装
centos7 nginx+php7yum安装. 一.安装nginx 1.安装yum源 rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/ ...
- iOS工厂模式使用小结
一.什么是工厂方法? 正式的解释是:在基类中定义创建对象的一个接口,让子类决定实例化哪个类.工厂方法让一个类的实例化延迟到子类中进行.工厂方法要解决的问题是对象的创建时机,它提供了一种扩展的策略,很好 ...
- python中字典的运算
问题: 如何查找在两个字典中相同的键.值元素? dict1 = {'a': 1, 'b': 2, 'c': 3} dict2 = {'a': 10, 'y': 11,'b': 2} dict1.key ...
- Python 潮流周刊#72:Python 3.13.0 最终版已发布!(摘要)
本周刊由 Python猫 出品,精心筛选国内外的 250+ 信息源,为你挑选最值得分享的文章.教程.开源项目.软件工具.播客和视频.热门话题等内容.愿景:帮助所有读者精进 Python 技术,并增长职 ...
- KubeSphere 边缘节点 IP 冲突的分析和解决思路分享
在上一篇监控问题排查的文章中,笔者分析了 KubeSphere 3.1.0 集成 KubeEdge 中的边缘监控原理和问题排查思路,在介绍 EdgeWatcher 组件时提到了"边缘节点的内 ...
- 开源函数计算平台 OpenFunction 保姆级入门教程
OpenFunction 0.6.0 上周已经正式发布了,带来了许多值得注意的功能,包括函数插件.函数的分布式跟踪.控制自动缩放.HTTP 函数触发异步函数等.同时,异步运行时定义也被重构了.核心 A ...
- Buffer和Channel
IO 和 NIO 区别: 可简单认为:IO 是面向流的处理,NIO 是面向块(缓冲区)的处理 面向流的 I/O 系统一次一个字节地处理数据. 一个面向块(缓冲区)的 I/O 系统以块的形式处理数据. ...
- numpy库(python)
文章目录 1.numpy简介 2.安装numpy 3.ndarry : numpy库的心脏 3.1 创建数组 3.2数据类型 3.3dtype NumPy是用Python.进行科学计算,尤其是数据分析 ...
- 一些常用的jQuery方法1_20220128
1.jQuery.merge()方法 $.merge() 函数用于合并两个数组内容到第一个数组.*$*.merge( first, second ) $(function () { var arr = ...