2024-11-9-leetcode每日一题-3242. 设计相邻元素求和服务

devtools/2024/11/14 1:02:47/

题目描述

给你一个 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。

解题思路

初始化grid时用map记录每个元素的位置信息,然后使用偏移量数组dx和dy记录移动的方向,前四个是计算相邻位置的,后四个是记录对角线元素的。在计算时,只需遍历四个方向判定是否合法后,返回和值即可。

AC代码

class NeighborSum {
public:unordered_map<int, pair<int, int>> pos;int n = 0, m = 0;int dx[8] = {-1, 0, 1, 0, -1, -1, 1, 1}, dy[8] = {0, 1, 0, -1, -1, 1, -1, 1};vector<vector<int>> s;NeighborSum(vector<vector<int>>& grid) {n = grid.size();m = grid[0].size();s = grid;for(int i = 0; i < n; i ++ )for(int j = 0; j < m; j ++) {pos[grid[i][j]] = {i, j};}}int adjacentSum(int value) {pair<int, int> p = pos[value];long ans = 0;for(int i = 0; i < 4; i ++) {int x = p.first + dx[i], y = p.second + dy[i];if(x >= 0 && x < n && y >= 0 && y < m)ans += s[x][y];}return ans;}int diagonalSum(int value) {pair<int, int> p = pos[value];long ans = 0;for(int i = 4; i < 8; i ++) {int x = p.first + dx[i], y = p.second + dy[i];if(x >= 0 && x < n && y >= 0 && y < m)ans += s[x][y];}return ans;}
};/*** Your NeighborSum object will be instantiated and called as such:* NeighborSum* obj = new NeighborSum(grid);* int param_1 = obj->adjacentSum(value);* int param_2 = obj->diagonalSum(value);*/


http://www.ppmy.cn/devtools/133426.html

相关文章

【Vue 全家桶】7、Vue UI组件库(更新中)

目录 Element UI移动三级目录 Element UI 移动 三级目录

计算机网络:运输层 —— 运输层概述

文章目录 运输层主要功能主要协议端口号 进程间基于网络的通信端到端的通信服务复用和分用 运输层 运输层是TCP/IP体系结构中一个关键的组成部分&#xff0c;它位于网络层和应用层之间&#xff0c;负责为两个主机之间提供端到端的通信服务。运输层的主要任务是处理与数据包的传…

JS爬虫实战之TikTok_Shop验证码

TikTok_Shop验证码逆向 逆向前准备思路1- 确认接口2- 参数确认3- 获取轨迹参数4- 构建请求5- 结果展示 结语 逆向前准备 首先我们得有TK Shop账号&#xff0c;否则是无法抓取到数据的。拥有账号后&#xff0c;我们直接进入登录。 TikTok Shop 登录页面 思路 逆向步骤一般分为…

物联网学习路线来啦!

物联网学习路线来啦! 物联网方向作为目前一个热门的技术发展方向&#xff0c;有大量的人才需求&#xff0c;小白的学习入门路线推荐以下步骤。 1.了解物联网基本概念 物联网&#xff08;IoT&#xff09;是由各种传感器、设备和互联网组成的网络&#xff0c;通过这个网络可以实现…

【vue】封装一个可随时暂停启动无需担心副作用的定时器

【vue】封装一个可随时暂停启动无需担心副作用的定时器 现成轮子&#xff1a;VueUse 库的 useIntervalFn 方法是什么&#xff1f;为什么要用它&#xff1f;怎么用&#xff1f; 分析源码 & 自己手写一个源码自己手写 现成轮子&#xff1a;VueUse 库的 useIntervalFn 方法 是…

100种算法【Python版】第50篇——Tim Sort

本文目录 1 基本原理2 主要步骤3 算法示例4 Python 实现4.1 代码说明4.2 复杂度分析Tim Sort 是一种混合排序算法,由 Tim Peters 于 2002 年为 Python 编程语言设计。它结合了插入排序和归并排序的优点,专门针对实际数据中的某些模式进行优化。Tim Sort 的核心思想是将数组分…

基于STM32设计的矿山环境监测系统(NBIOT)_262

文章目录 一、前言1.1 项目介绍【1】开发背景【2】研究的意义【3】最终实现需求【4】项目硬件模块组成1.2 设计思路【1】整体设计思路【2】上位机开发思路1.3 项目开发背景【1】选题的意义【2】摘要【3】国内外相关研究现状【5】参考文献1.4 开发工具的选择【1】设备端开发【2】…

React 守卫路由

1.在components文件夹下新建一个Auth.js的文件&#xff0c;里面写入判断token的逻辑&#xff1a; // 导入重定向的路由模块 import { Navigate } from "react-router-dom" // 获取本地token let token window.sessionStorage.getItem(token) function Auth({childr…