LeetCode每日一题3242---设计相邻元素求和服务

一、题目描述

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

0 <= grid[i][j] <= n2 - 1

所有 grid[i][j] 值均不重复。

adjacentSum 和 diagonalSum 中的 value 均在范围 [0, n2 - 1] 内。

最多会调用 adjacentSum 和 diagonalSum 总共 2 * n2 次。

二、解题思路

这道题目最容易想到的解题思路是先通过value找到在grid的位置,然后利用相邻元素位置的规律和对角线相邻元素位置的规律,获取相邻元素的值。

比如:(i,j)位置的相邻元素的位置是(i-1,j),(i+1,j),(i,j+1),(i,j-1)

(i,j)位置的对角线相邻元素的位置是(i-1,j-1),(i+1,j+1),(i-1,j+1),(i+1,j-1)

三、代码

python 复制代码
class NeighborSum(object):

    def __init__(self, grid):
        """
        :type grid: List[List[int]]
        """
        self.grid = grid
        self.shape1 =  len(grid) 
        self.shape2 = len(grid[0])
        

    def adjacentSum(self, value):
        """
        :type value: int
        :rtype: int
        """
        sum = 0
        for i in range(0,self.shape1):
            for j in range(0,self.shape2):
                if self.grid[i][j] == value:
                    # 计算四个相邻位置的和
                    for x, y in [(i-1, j), (i+1, j), (i, j-1), (i, j+1)]:
                        # 检查是否在边界内
                        if 0 <= x < self.shape1 and 0 <= y < self.shape2:
                            sum += self.grid[x][y]
                    return sum  # 返回相邻和
        return 0
        

    def diagonalSum(self, value):
        """
        :type value: int
        :rtype: int
        """
        sum = 0
        for i in range(0,self.shape1):
            for j in range(0,self.shape2):
                if self.grid[i][j] == value:
                    # 计算四个对角线相邻位置的和
                    for x, y in [(i-1, j-1), (i+1, j+1), (i-1, j+1), (i+1, j-1)]:
                        # 检查是否在边界内
                        if 0 <= x < self.shape1 and 0 <= y < self.shape2:
                            sum += self.grid[x][y]
                    return sum  # 返回相邻和
        return 0
        


# Your NeighborSum object will be instantiated and called as such:
# obj = NeighborSum(grid)
# param_1 = obj.adjacentSum(value)
# param_2 = obj.diagonalSum(value)
相关推荐
惊鸿.Jh18 分钟前
【滑动窗口】3254. 长度为 K 的子数组的能量值 I
数据结构·算法·leetcode
明灯L19 分钟前
《函数基础与内存机制深度剖析:从 return 语句到各类经典编程题详解》
经验分享·python·算法·链表·经典例题
碳基学AI25 分钟前
哈尔滨工业大学DeepSeek公开课:探索大模型原理、技术与应用从GPT到DeepSeek|附视频与讲义免费下载方法
大数据·人工智能·python·gpt·算法·语言模型·集成学习
补三补四28 分钟前
机器学习-聚类分析算法
人工智能·深度学习·算法·机器学习
独好紫罗兰38 分钟前
洛谷题单3-P5718 【深基4.例2】找最小值-python-流程图重构
开发语言·python·算法
正脉科工 CAE仿真1 小时前
基于ANSYS 概率设计和APDL编程的结构可靠性设计分析
人工智能·python·算法
Dovis(誓平步青云)1 小时前
【数据结构】排序算法(中篇)·处理大数据的精妙
c语言·数据结构·算法·排序算法·学习方法
2401_872945091 小时前
【补题】Xi‘an Invitational 2023 E. Merge the Rectangles
算法
高 朗1 小时前
2025高频面试设计模型总结篇
设计模式·面试·职场和发展
暮雨哀尘2 小时前
微信小程序开发:开发实践
开发语言·算法·微信小程序·小程序·notepad++·性能·技术选型