LeetCode 3242.设计相邻元素求和服务:哈希表
【LetMeFly】3242.设计相邻元素求和服务:哈希表
力扣题目链接:https://leetcode.cn/problems/design-neighbor-sum-service/
给你一个 n x n 的二维数组 grid,它包含范围 [0, n2 - 1] 内的不重复元素。
实现 neighborSum 类:
neighborSum(int [][]grid)初始化对象。int adjacentSum(int value)返回在grid中与value相邻的元素之和,相邻指的是与value在上、左、右或下的元素。int diagonalSum(int value)返回在grid中与value对角线相邻的元素之和,对角线相邻指的是与value在左上、右上、左下或右下的元素。

示例 1:
输入:
["neighborSum", "adjacentSum", "adjacentSum", "diagonalSum", "diagonalSum"]
[[[[0, 1, 2], [3, 4, 5], [6, 7, 8]]], [1], [4], [4], [8]]
输出: [null, 6, 16, 16, 4]
解释:

- 1 的相邻元素是 0、2 和 4。
- 4 的相邻元素是 1、3、5 和 7。
- 4 的对角线相邻元素是 0、2、6 和 8。
- 8 的对角线相邻元素是 4。
示例 2:
输入:
["neighborSum", "adjacentSum", "diagonalSum"]
[[[[1, 2, 0, 3], [4, 7, 15, 6], [8, 9, 10, 11], [12, 13, 14, 5]]], [15], [9]]
输出: [null, 23, 45]
解释:

- 15 的相邻元素是 0、10、7 和 6。
- 9 的对角线相邻元素是 4、12、14 和 15。
提示:
3 <= n == grid.length == grid[0].length <= 100 <= grid[i][j] <= n2 - 1- 所有
grid[i][j]值均不重复。 adjacentSum和diagonalSum中的value均在范围[0, n2 - 1]内。- 最多会调用
adjacentSum和diagonalSum总共2 * n2次。
解题方法:哈希表
使用哈希表记录每个值的adjacentSum和diagonalSum,查询操作的时候直接去哈希表里查询就可以了。
- 时间复杂度:初始化 O ( n 2 ) O(n^2) O(n2)单次查询 O ( 1 ) O(1) O(1)
- 空间复杂度:初始化 O ( n 2 ) O(n^2) O(n2)单次查询 O ( 1 ) O(1) O(1)
AC代码
C++
const int adj[4][2] = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};
const int dia[4][2] = {{-1, -1}, {-1, 1}, {1, -1}, {1, 1}};class NeighborSum {
private:vector<pair<int, int>> cache;
public:NeighborSum(vector<vector<int>>& grid) {int n = grid.size();cache.resize(n * n);for (int i = 0; i < n; i++) {for (int j = 0; j < n; j++) {int cntAdj = 0, cntDia = 0;for (int k = 0; k < 4; k++) {int x = i + adj[k][0], y = j + adj[k][1];if (x >= 0 && x < n && y >= 0 && y < n) {cntAdj += grid[x][y];}x = i + dia[k][0], y = j + dia[k][1];if (x >= 0 && x < n && y >= 0 && y < n) {cntDia += grid[x][y];}}cache[grid[i][j]] = {cntAdj, cntDia};}}}int adjacentSum(int value) {return cache[value].first;}int diagonalSum(int value) {return cache[value].second;}
};
Python
from typing import Listdirection = [[-1, 0], [1, 0], [0, -1], [0, 1], [-1, -1], [1, 1], [-1, 1], [1, -1]]class NeighborSum:def __init__(self, grid: List[List[int]]):n = len(grid)self.cache = [[0, 0] for _ in range(n * n)]for i in range(n):for j in range(n):for th, (x, y) in enumerate(direction):if 0 <= x + i < n and 0 <= y + j < n:self.cache[grid[i][j]][th // 4] += grid[x + i][y + j]def adjacentSum(self, value: int) -> int:return self.cache[value][0]def diagonalSum(self, value: int) -> int:return self.cache[value][1]
Java
class NeighborSum {private static final int[][] direction = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}, {-1, -1}, {-1, 1}, {1, -1}, {1, 1}};private int[][] cache;public NeighborSum(int[][] grid) {int n = grid.length;cache = new int[n * n][2];for (int i = 0; i < n; i++) {for (int j = 0; j < n; j++) {for (int k = 0; k < 8; k++) {int x = i + direction[k][0], y = j + direction[k][1];if (x >= 0 && x < n && y >= 0 && y < n) {cache[grid[i][j]][k / 4] += grid[x][y];}}}}}public int adjacentSum(int value) {return cache[value][0];}public int diagonalSum(int value) {return cache[value][1];}
}
Go
package mainvar direction = []struct{x, y int}{{-1, 0}, {1, 0}, {0, -1}, {0, 1}, {-1, -1}, {-1, 1}, {1, -1}, {1, 1}}
type Value [][2]inttype NeighborSum struct {cache Value
}func Constructor(grid [][]int) NeighborSum {n := len(grid)var neighborSum NeighborSumneighborSum.cache = make(Value, n * n)for i, row := range grid {for j, v := range row {for k, d := range direction {x, y := i + d.x, j + d.yif x >= 0 && x < n && y >= 0 && y < n {neighborSum.cache[v][k / 4] += grid[x][y]}}}}return neighborSum
}func (this *NeighborSum) AdjacentSum(value int) int {return this.cache[value][0]
}func (this *NeighborSum) DiagonalSum(value int) int {return this.cache[value][1]
}
同步发文于CSDN和我的个人博客,原创不易,转载经作者同意后请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/143698347
相关文章:
LeetCode 3242.设计相邻元素求和服务:哈希表
【LetMeFly】3242.设计相邻元素求和服务:哈希表 力扣题目链接:https://leetcode.cn/problems/design-neighbor-sum-service/ 给你一个 n x n 的二维数组 grid,它包含范围 [0, n2 - 1] 内的不重复元素。 实现 neighborSum 类: …...
【AliCloud】ack + ack-secret-manager + kms 敏感数据安全存储
介绍 ack-secret-manager支持以Kubernetes Secret实例的形式向集群导入或同步KMS凭据信息,确保您集群内的应用能够安全地访问敏感信息。通过该组件,您可以实现密钥数据的自动更新,使应用负载通过文件系统挂载指定Secret实例来使用凭据信息&a…...
探索JavaScript的强大功能:从基础到高级应用
随着互联网技术的不断发展,JavaScript已经成为现代Web开发的基石。无论是简单的交互效果,还是复杂的前端框架,JavaScript都在其中扮演着不可或缺的角色。本文旨在对JavaScript进行深入探讨,从其基础概念到高级应用,并讨…...
新增支持Elasticsearch数据源,支持自定义在线地图风格,DataEase开源BI工具v2.10.2 LTS发布
2024年11月11日,人人可用的开源BI工具DataEase正式发布v2.10.2 LTS版本。 这一版本的功能变动包括:数据源方面,新增了对Elasticsearch数据源的支持;图表方面,对地图类和表格类图表进行了功能增强和优化,增…...
Spark的容错机制
1,Spark如何保障数据的安全 1、RDD容错机制:persist持久化机制 1)cache算子 - 功能:将RDD缓存在内存中 - 语法:cache() - 本质:底层调用的还是persist(StorageLevel.MEMORY_ONLY)&…...
YOLOv8改进 | 利用YOLOv8进行视频划定区域目标统计计数
简介 本项目旨在利用YOLOv8算法来实现视频中划定区域目标的统计计数。YOLOv8是一种目标检测算法,能够实现实时目标检测和定位。视频划定区域目标统计计数是指在一个视频中,对于指定的区域,统计出该区域内出现的目标物体数量。 该项目的工作流程如下:首先,利用YOLOv8算法…...
基于yolov8、yolov5的番茄成熟度检测识别系统(含UI界面、训练好的模型、Python代码、数据集)
摘要:番茄成熟度检测在农业生产及质量控制中起着至关重要的作用,不仅能帮助农民及时采摘成熟的番茄,还为自动化农业监测提供了可靠的数据支撑。本文介绍了一款基于YOLOv8、YOLOv5等深度学习框架的番茄成熟度检测模型,该模型使用了…...
wafw00f源码详细解析
声明 本人菜鸟一枚,为了完成作业,发现网上所有的关于wafw00f的源码解析都是这抄那那抄这的,没有新东西,所以这里给出一个详细的源码解析,可能有错误,如果有大佬发现错误,可以在评论区平和的指出…...
什么是crm?3000字详细解析
在现代商业环境中,客户关系管理(CRM)已经成为企业驱动成功的关键工具。在复杂且竞争激烈的市场中,如何有效地管理客户关系、提升客户满意度,并增加客户忠诚度,越来越成为企业迫切关心的问题。而CRM系统&…...
WEB3.0介绍
Web3.0是对Web2.0的改进,被视为互联网潜在的下一阶段。 以下是对Web3.0的详细介绍: 一、定义与概念 Web3.0被描述为一个运行在区块链技术之上的去中心化互联网。它旨在构建一个更加自主、智能和开放的互联网环境,其中用户不必 在不同中心化…...
【深度学习】LSTM、BiLSTM详解
文章目录 1. LSTM简介:2. LSTM结构图:3. 单层LSTM详解4. 双层LSTM详解5. BiLSTM6. Pytorch实现LSTM示例7. nn.LSTM参数详解 1. LSTM简介: LSTM是一种循环神经网络,它可以处理和预测时间序列中间隔和延迟相对较长的重要事件。LSTM通…...
分子对接--软件安装
分子对接相关软件安装 一、软件 AutoDock,下载链接: linkMGLtools,下载链接: link 自行选择合适版本下载,这里主要叙述在win上的具体安装流程: 下载得到: 二、运行 运行autodocksuite-4.2.6.i86Windows得到&#…...
【Python无敌】在 QGIS 中使用 Python
QGIS 中有 Python 的运行环境,可以很好地执行各种任务。 这里的问题是如何在 Jupyter 中调用 QGIS 的功能。 首先可以肯定的是涉及到 GUI 的一些任务是无法在 Jupyter 中访问的, 这样可以用的功能主要是地处理工具。 按如下方式进行了尝试。 原想使用 gdal:hillshade ,但是…...
全面解读:低代码开发平台的必备要素——系统策划篇
在传统开发过程中,系统策划起着举足轻重的作用,它宛如一位幕后的总指挥,把控着整个软件开发项目的走向。而随着技术的不断进步,低代码开发平台逐渐崭露头角,它以快速开发、降低技术门槛等优势吸引了众多企业和开发者的…...
Vue开发自动生成验证码功能 前端实现不使用第三方插件实现随机验证码功能,生成的验证码添加干扰因素
Vue实现不使用第三方插件,开发随机生成验证码功能 效果图,其中包含了短信验证码功能,以及验证码输入是否正确功能 dom结构 <div class="VerityInputTu"><div class="labelClass">图形验证码</div><div class="tuxingInput…...
# filezilla连接 虚拟机ubuntu系统出错“尝试连接 ECONNREFUSED - 连接被服务器拒绝, 失败,无法连接服务器”解决方案
filezilla连接 虚拟机ubuntu系统出错“尝试连接 ECONNREFUSED - 连接被服务器拒绝, 失败,无法连接服务器”解决方案 一、问题描述: 当我们用filezilla客户端 连接 虚拟机ubuntu系统时,报错“尝试连接 ECONNREFUSED - 连接被服务…...
2024/11/13 英语每日一段
The new policy has drawn many critics. Data and privacy experts said the Metropolitan Transit Authority’s new initiative doesn’t address the underlying problem that causes fare evasion, which is related to poverty and access. Instead, the program tries “…...
【全栈开发平台】全面解析 StackBlitz 最新力作 Bolt.new:AI 驱动的全栈开发平台
文章目录 [TOC]🌟 Bolt.new 的独特价值1. **无需配置,立刻开发**2. **AI 驱动,智能生成代码**3. **极致的速度与安全性**4. **一键部署,轻松上线**5. **免费开放,生态丰富** 🛠️ Bolt.new 使用教程一、快速…...
文献解读-DNAscope: High accuracy small variant calling using machine learning
关键词:基准与方法研究;基因测序;变异检测; 文献简介 标题(英文):DNAscope: High accuracy small variant calling using machine learning标题(中文):DNAsc…...
成都睿明智科技有限公司解锁抖音电商新玩法
在这个短视频风起云涌的时代,抖音电商以其独特的魅力迅速崛起,成为众多商家争夺的流量高地。而在这片充满机遇与挑战的蓝海中,成都睿明智科技有限公司犹如一颗璀璨的新星,以其专业的抖音电商服务,助力无数品牌实现从零…...
充电桩行业转型:从规模竞争到质量竞争,CCC认证锚定新赛道
过去五年,中国充电桩行业的核心叙事只有一个字:铺。谁能更快拿点位,谁能更快建站,谁能更快完成城市、县域、高速、社区的覆盖,谁就有资格坐上牌桌。功率数字不断攀升,铺设数量不断刷新,市场份额…...
一站式跨平台资源下载神器:5分钟掌握高效网络资源管理
一站式跨平台资源下载神器:5分钟掌握高效网络资源管理 【免费下载链接】res-downloader 视频号、小程序、抖音、快手、小红书、直播流、m3u8、酷狗、QQ音乐等常见网络资源下载! 项目地址: https://gitcode.com/GitHub_Trending/re/res-downloader 在数字内容…...
sudo提权漏洞-Baron Samedit (sudo堆缓冲区溢出漏洞)复现(CVE-2021-3156)
from: https://blog.csdn.net/mooyuan/article/details/156277001 注意点: 下载POC的方法不可行 可以下载的地址:https://github.com/blasty/CVE-2021-3156 文章中:宿主机访问172.17.0.1:8888环境确认服务已经搭建成功 此方法测试不可行…...
STM32F103C8T6+TJA1042+UTA0403:一个CAN通讯新手踩过的所有坑(附完整接线图与代码)
STM32F103C8T6与TJA1042的CAN通讯实战:从零到通的完整避坑指南 当蓝色PCB上那颗STM32F103C8T6第一次通过CAN总线发出数据帧时,我的示波器上终于出现了规整的差分信号波形——这距离我首次焊接CAN收发器已经过去了整整三周。作为嵌入式开发的新手…...
8051单片机中断向量号计算与配置详解
1. C51中断向量号计算方法解析在8051单片机开发中,中断处理是最核心的功能之一。作为一名长期使用Keil C51工具链的嵌入式开发者,我经常遇到新手询问如何正确计算中断向量号的问题。这个看似简单的数字背后,其实隐藏着8051架构的设计哲学。1.…...
openpilot终极指南:如何在300+车型上快速部署开源自动驾驶系统
openpilot终极指南:如何在300车型上快速部署开源自动驾驶系统 【免费下载链接】openpilot openpilot is an operating system for robotics. Currently, it upgrades the driver assistance system on 300 supported cars. 项目地址: https://gitcode.com/GitHub_…...
Sunshine游戏串流服务器:打造个人游戏云的终极免费方案
Sunshine游戏串流服务器:打造个人游戏云的终极免费方案 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine 想要在任何设备上畅玩PC游戏吗?Sunshine作为一款开源…...
OpenClaw入门教程:从零部署到第一个智能体
OpenClaw OpenClaw(原 Moltbot)是一个开源的 AI 智能体(Agent)框架,旨在通过连接大语言模型(LLM)与外部工具(如浏览器、API、办公软件),实现自动化任务执行。…...
ReAct 循环的 50 行 Go 实现,逐行拆解
ReAct 循环的 50 行 Go 实现,逐行拆解 系列「企业级 AI Agent 实现拆解」第三篇。上一篇讲了 Session 聚合根和状态机——状态怎么迁移、事件怎么发、终态怎么判。但状态机本身是静态的,谁在驱动这些迁移? 答案是 RunTurnHandler.Handle()——…...
2026 大模型企业画像梳理技术解析:混乱画像规范方法深度测评
引言随着 AI 搜索成为商业信息获取的主要渠道,大模型生成的企业画像准确性直接影响企业品牌形象和获客效果。据中国 GEO 行业协会 2026 年调研数据显示,超过 76% 的企业反映大模型生成的企业画像存在信息混乱、错误遗漏、业务不匹配等问题,其…...
