首页 > 其他分享 >2024-12-18:正方形中的最多点数。用go语言,给定一个二维数组 points 和一个字符串 s,其中 points[i] 表示第 i 个点的坐标,s[i] 表示第 i 个点的标签。 如果一个正

2024-12-18:正方形中的最多点数。用go语言,给定一个二维数组 points 和一个字符串 s,其中 points[i] 表示第 i 个点的坐标,s[i] 表示第 i 个点的标签。 如果一个正

时间:2024-12-18 09:42:19浏览次数:10  
标签:12 个点 正方形 points let vec min1 min2

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:

chatgpt

题目来自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));
}

在这里插入图片描述

标签:12,个点,正方形,points,let,vec,min1,min2
From: https://www.cnblogs.com/moonfdd/p/18613965

相关文章

  • 电脑为什么会提示“msvcr120.dll缺失”?“找不到msvcr120.dll文件”要怎么解决?
    电脑故障排查指南:揭秘“msvcr120.dll缺失”的真相与解决方案在软件开发与日常维护的广阔天地里,遇到系统报错或文件缺失的情况可谓家常便饭。今天,我将带领大家深入探讨一个常见的系统提示——“msvcr120.dll缺失”,并揭秘其背后的原因及有效解决方案。通过这一探讨,希望能帮助大......
  • 发点牢骚(20241217)
    我个人表示不要把一些东西发在一些论坛,社区和公开区域。(尤其是NGA)最近部分平台有了挖坟挂人的征兆,这使得我感觉“沟通成本”太高了,因为总有傻X喜欢开天眼,喜欢以现在的角度强行评价过去的事,你们天天发个帖子评价啥东西的过去,你能回到2000年吗?回不到就别提了。我一直认为讨论历......
  • 12.17学习总结
    1.结构体学习(学完哒)    2.写了英语作业~ 3.p1162题代码已经敲出来哒,但是运行仍存在问题,我需再努力下 ......
  • 2024.12.17
    根据您提供的代码和错误信息,问题在于您尝试将Page<Policy>对象直接传递给page方法,但是page方法期望的是一个实现了IPage接口的对象。Page类是IPage接口的一个实现,所以您可以直接使用Page类,但是需要确保您使用的是正确的类型参数。您的代码中出现的错误提示表明,您可......
  • 12.5
    2-使用更好的算法选择一个最优算法对性能优化的效果最大。各种优化手段都能改善程序的性能。它们可以压缩以前看似低效的代码的执行时间,就像通过升级 PC 能让程序运行得更快一样。但不幸的是,如同升级 PC 一样,大部分优化手段只能使程序性能呈线性提升。许多优化手段可以将程序......
  • 12.4
    c++性能优化策略 1-用好的编译器并用好编译器C++ 编译器是非常复杂的软件构件。每种编译器为 C++ 语句生成的机器码都有差别。它们所看到的优化机会是不同的,会为相同的源代码产生不同的可执行文件。如果打算为代码做出最后一丁点性能提升,那么你可以尝试一下各种不同的编......
  • 12.3
    说“性能无所谓”的同事也可能是想说性能对于某些特殊的应用程序——例如受人体反应约束或运行于处理器速度极快的桌面计算机上的应用程序——无所谓。但对于那些运行于内存、电源或者处理速度受限的小型嵌入式设备和移动处理器上的应用程序来说,性能的影响非常大;对于那些运行于......
  • 12.11
    6-使用更好的数据结构选择最合适的数据结构对性能有着深刻的影响,因为插入、迭代、排序和检索元素的算法的运行时开销取决于数据结构。除此之外,不同的数据结构在使用内存管理器的方式上也有所不同。另一个原因是数据结构可能有也可能没有优秀的缓存本地化。7-提高并发性大多数程......
  • 12.10
    5-移除计算除了内存分配和函数调用外,单条 C++ 语句的性能开销通常都很小。但是如果在循环中执行 100 万次这条语句,或是每次程序处理事件时都执行这条语句,那么这就是个大问题了。绝大多数程序都会有一个或多个主要的事件处理循环和一个或多个处理字符的函数。找出并优化这些循......
  • 12.9
    4-减少内存分配和复制减少对内存管理器的调用是一种非常有效的优化手段,以至于开发人员只要掌握了这一个技巧就可以变为成功的性能优化人员。绝大多数 C++ 语言特性的性能开销最多只是几个指令,但是每次调用内存管理器的开销却是数千个指令。由于字符串是许多 C++ 程序中非常重......