2024-01-20:用go语言,小扣在探索丛林的过程中,无意间发现了传说中“落寞的黄金之都“, 而在这片建筑废墟的地带中,小扣使用探测仪监测到了存在某种带有「祝福」效果的力场, 经过不断的勘测记录,
2024-01-20:用go语言,小扣在探索丛林的过程中,无意间发现了传说中"落寞的黄金之都",
而在这片建筑废墟的地带中,小扣使用探测仪监测到了存在某种带有「祝福」效果的力场,
经过不断的勘测记录,小扣将所有力场的分布都记录了下来,
forceField[i] = [x,y,side] ,
表示第 i 片力场将覆盖以坐标 (x,y) 为中心,边长为 side 的正方形区域。
若任意一点的 力场强度 等于覆盖该点的力场数量。
请求出在这片地带中 力场强度 最强处的 力场强度。
注意:力场范围的边缘同样被力场覆盖。
输入: forceField = [[0,0,1],[1,0,1]]。
输出:2。
来自lc的LCP 74. 最强祝福力场。
答案2024-01-20:
来自左程云。
大体过程如下:
1.定义一个变量n表示力场数量,初始化为forceField的长度。
2.创建两个空数组xs和ys,长度为n*2,用于存储力场覆盖区域的边界坐标。
3.遍历forceField,对于每个力场,将其中心坐标以及边长转换成边界坐标,并保存到xs和ys中。
4.对xs和ys进行排序。
5.去除xs和ys中的重复元素,并分别记录剩余元素的数量,得到sizex和sizey。
6.创建二维数组diff,大小为(sizex+2) x (sizey+2),用于记录每个力场的覆盖数量。
7.遍历forceField,对于每个力场,找到其在xs和ys中对应的边界索引,并根据索引更新diff数组。
8.初始化变量ans为0,用于记录最大的力场强度。
9.使用动态规划的思想,从diff[1][1]开始遍历diff数组,依次计算每个位置的力场强度,并更新ans。
10.返回ans作为最大的力场强度。
总的时间复杂度:O(nlogn),其中n为力场数量,排序的时间复杂度为O(nlogn)。
总的额外空间复杂度:O(n),存储了xs和ys数组。
go完整代码如下:
package main
import (
"fmt"
"sort"
)
func fieldOfGreatestBlessing(forceField [][]int) int {
n := len(forceField)
xs := make([]int64, n*2)
ys := make([]int64, n*2)
for i := 0; i < n; i++ {
x := int64(forceField[i][0])
y := int64(forceField[i][1])
r := int64(forceField[i][2])
xs[i*2] = (x << 1) - r
xs[i*2+1] = (x << 1) + r
ys[i*2] = (y << 1) - r
ys[i*2+1] = (y << 1) + r
}
sort.Slice(xs, func(i, j int) bool { return xs[i] < xs[j] })
sort.Slice(ys, func(i, j int) bool { return ys[i] < ys[j] })
sizex := removeDuplicates(xs)
sizey := removeDuplicates(ys)
diff := make([][]int, sizex+2)
for i := range diff {
diff[i] = make([]int, sizey+2)
}
for i := 0; i < n; i++ {
x := int64(forceField[i][0])
y := int64(forceField[i][1])
r := int64(forceField[i][2])
a := binarySearch(xs, (x<<1)-r)
b := binarySearch(ys, (y<<1)-r)
c := binarySearch(xs, (x<<1)+r)
d := binarySearch(ys, (y<<1)+r)
set(diff, a, b, c, d)
}
ans := 0
for i := 1; i < len(diff); i++ {
for j := 1; j < len(diff[0]); j++ {
diff[i][j] += diff[i-1][j] + diff[i][j-1] - diff[i-1][j-1]
ans = max(ans, diff[i][j])
}
}
return ans
}
func removeDuplicates(nums []int64) int {
size := 1
for i := 1; i < len(nums); i++ {
if nums[i] != nums[size-1] {
nums[size] = nums[i]
size++
}
}
return size
}
func binarySearch(nums []int64, v int64) int {
l, r := 0, len(nums)-1
var m, ans int
for l <= r {
m = (l + r) / 2
if nums[m] >= v {
ans = m
r = m - 1
} else {
l = m + 1
}
}
return ans + 1
}
func set(diff [][]int, a, b, c, d int) {
diff[a][b] += 1
diff[c+1][d+1] += 1
diff[c+1][b] -= 1
diff[a][d+1] -= 1
}
func max(a, b int) int {
if a > b {
return a
}
return b
}
func main() {
forceField := [][]int{{0, 0, 1}, {1, 0, 1}}
result := fieldOfGreatestBlessing(forceField)
fmt.Println(result)
}

2024-01-20:用go语言,小扣在探索丛林的过程中,无意间发现了传说中“落寞的黄金之都“, 而在这片建筑废墟的地带中,小扣使用探测仪监测到了存在某种带有「祝福」效果的力场, 经过不断的勘测记录,的更多相关文章
- Linux 小知识翻译 - 「packet」(网络数据包)
用手机接收邮件或者访问网页的时候,一般会说有「packet费用」(这是日本的说法,在中国好像一般都说 “流量费”),即使对网络不太熟悉的人也知道「packet」这个词(这里也是日本的情况). 那么,「 ...
- 20个C语言中常用宏定义总结
01: 防止一个头文件被重复包含 #ifndef COMDEF_H#define COMDEF_H//头文件内容#endif 02: 重新定义一些类型防止由于各种平台和编译器的不同,而产生的类型字节数 ...
- 「NOI2013」小 Q 的修炼 解题报告
「NOI2013」小 Q 的修炼 第一次完整的做出一个提答,花了半个晚上+一个上午+半个下午 总体来说太慢了 对于此题,我认为的难点是观察数据并猜测性质和读入操作 我隔一会就思考这个sb字符串读起来怎 ...
- 「SCOI2015」小凸玩密室 解题报告
「SCOI2015」小凸玩密室 虽然有心里在想一些奇奇怪怪的事情的原因,不过还是写太久了.. 不过这个题本身也挺厉害的 注意第一个被点亮的是任意选的,我最开始压根没注意到 \(dp_{i,j}\)代表 ...
- loj#2009.「SCOI2015」小凸玩密室
题目链接 loj#2009. 「SCOI2015」小凸玩密室 题解 树高不会很高<=20 点亮灯泡x,点亮x的一个子树,再点亮x另外的子树, 然后回到x的父节点,点亮父节点之后再点亮父节点的其他 ...
- loj #2008. 「SCOI2015」小凸想跑步
#2008. 「SCOI2015」小凸想跑步 题目描述 小凸晚上喜欢到操场跑步,今天他跑完两圈之后,他玩起了这样一个游戏. 操场是个凸 n nn 边形,N NN 个顶点按照逆时针从 0∼n−1 0 ...
- loj #2006. 「SCOI2015」小凸玩矩阵
#2006. 「SCOI2015」小凸玩矩阵 题目描述 小凸和小方是好朋友,小方给小凸一个 N×M N \times MN×M(N≤M N \leq MN≤M)的矩阵 A AA,要求小凸从其中选出 ...
- Python Cookbook(第3版)中文版:15.20 处理C语言中的可迭代对象
15.20 处理C语言中的可迭代对象¶ 问题¶ 你想写C扩展代码处理来自任何可迭代对象如列表.元组.文件或生成器中的元素. 解决方案¶ 下面是一个C扩展函数例子,演示了怎样处理可迭代对象中的元素: s ...
- Linux 小知识翻译 - 「BitTorrent」
这次聊聊「BitTorrent」. (也就是下片子的 BT) BitTorrent是文件传输的一种.它可以在服务端负担很小的情况下高速的传输文件. BitTorrent最大的特点就是服务端可以将文件的 ...
- Linux 小知识翻译 - 「代理服务器」
这回聊聊「代理服务器」. 在公司里,不通过代理服务器无法连接互联网的,由于代理服务器的原因,有些服务的使用是受到限制的. 有人可能会觉得为什么会存在这种东西?(这里指代理服务器) Proxy本来的意思 ...
随机推荐
- [ABC263F] Tournament
Problem Statement $2^N$ people, numbered $1$ to $2^N$, will participate in a rock-paper-scissors tou ...
- Java项目整合短信验证码
一.开通短信服务 本来想整合阿里云短信服务的,可是签名一直审核不过,所以在阿里云的云市场找到了一个替代产品(sddx) 接下来小伙伴们按照自己的经济实力购买或者用免费的5条(我就是用免费的5条了) 购 ...
- 使用Py2neo更新Neo4j中节点的属性值的正确姿势
1 def findNode(name, graph): 2 matcher = NodeMatcher(graph) 3 m = matcher.match(name = name).first() ...
- EF Core助力信创国产数据库
前言 国产数据库作为国产化替代的重要环节,在我国信创产业政策的指引下实现加速发展,我们国产数据库已进入百花齐放的快速发展期,相信接触到涉及到政府类等项目的童鞋尤为了解,与此同时我们有一部分也在使用各种 ...
- 春秋云镜 - CVE-2022-28512
Fantastic Blog (CMS)是一个绝对出色的博客/文章网络内容管理系统.它使您可以轻松地管理您的网站或博客,它为您提供了广泛的功能来定制您的博客以满足您的需求.它具有强大的功能,您无需接触 ...
- BFS(三)单词接龙 ⅱ
对应 126. 单词接龙 II 问题描述 按字典 wordList 完成从单词 beginWord 到单词 endWord 转化,一个表示此过程的 转换序列 是形式上像 beginWord -> ...
- P1990-覆盖墙壁
分情况: \[\left\{ \begin{aligned} & 条形 \left\{ \begin{aligned} 横着\\ 竖着\\ \end{aligned}\right. \\ &a ...
- Python快速爬取车标网图片,以后不要说这什么车你不认识了!
知识不分边界...... 人,为什么要读书?举个例子: 当看到天边飞鸟,你会说:"落霞与孤鹜齐飞,秋水共长天一色."而不是:"卧靠,好多鸟."; 当你失恋时你低 ...
- 海量数据分析快准稳!GaussDB(for MySQL) HTAP只读分析特性详解
摘要:除了拥有 ClickHouse 本身的极致性能外,GaussDB(for MySQL)的HTAP只读分析在 MaterilizeMySQL引擎的性能和稳定性等方面具有更优秀的表现,为提供更快更准 ...
- 带你认识三种kafka消息发送模式
摘要:在kafka-0.8.2之后,producer不再区分同步(sync)和异步方式(async),所有的请求以异步方式发送,这样提升了客户端效率. 本文分享自华为云社区<kafka消息发送模 ...