[Leetcode小记] 3242. 设计相邻元素求和服务

devtools/2024/11/20 17:27:36/

题目:

代码:

class NeighborSum {private int n;private int[][] grid;private int[][] adjacent_sum;private int[][] diagonal_sum;private int[][] index_map;public NeighborSum(int[][] grid) {this.grid=grid;n=grid.length;adjacent_sum=new int[n][n];diagonal_sum=new int[n][n];index_map=new int[n*n][2];//int count=0;//以为是按顺序排列的 实际顺序可能打乱for(int i=0;i<n;i++){for(int j=0;j<n;j++){index_map[grid[i][j]][0]=i;index_map[grid[i][j]][1]=j;}}for(int i=0;i<n;i++){for(int j=0;j<n;j++){if(i==0&&j==0){//考虑左上角顶点adjacent_sum[i][j]=grid[i+1][j]+grid[i][j+1];diagonal_sum[i][j]=grid[i+1][j+1];}else if(i==n-1&&j==n-1){//考虑右下角顶点adjacent_sum[i][j]=grid[i-1][j]+grid[i][j-1];diagonal_sum[i][j]=grid[i-1][j-1];}else if(i==0&&j==n-1){//考虑右上角顶点adjacent_sum[i][j]=grid[i+1][j]+grid[i][j-1];diagonal_sum[i][j]=grid[i+1][j-1];}else if(i==n-1&&j==0){//考虑左下角顶点adjacent_sum[i][j]=grid[i-1][j]+grid[i][j+1];diagonal_sum[i][j]=grid[i-1][j+1];}else if(i==0){//第一行除了左上右上顶点的数adjacent_sum[i][j]=grid[i+1][j]+grid[i][j+1]+grid[i][j-1];diagonal_sum[i][j]=grid[i+1][j+1]+grid[i+1][j-1];}else if(i==n-1){//最后一行除了左下右下顶点的数adjacent_sum[i][j]=grid[i-1][j]+grid[i][j+1]+grid[i][j-1];diagonal_sum[i][j]=grid[i-1][j-1]+grid[i-1][j+1];}else if(j==0){//第一列除了左上左下顶点的数adjacent_sum[i][j]=grid[i-1][j]+grid[i+1][j]+grid[i][j+1];diagonal_sum[i][j]=grid[i+1][j+1]+grid[i-1][j+1];}else if(j==n-1){//最后一列除了右上右下顶点的数adjacent_sum[i][j]=grid[i-1][j]+grid[i+1][j]+grid[i][j-1];diagonal_sum[i][j]=grid[i+1][j-1]+grid[i-1][j-1];}else{//非顶点、非第一行、非第一列、非最后一行、非最后一列的数adjacent_sum[i][j]=grid[i-1][j]+grid[i+1][j]+grid[i][j-1]+grid[i][j+1];diagonal_sum[i][j]=grid[i-1][j-1]+grid[i-1][j+1]+grid[i+1][j-1]+grid[i+1][j+1];}}}}public int adjacentSum(int value) {return adjacent_sum[index_map[value][0]][index_map[value][1]];}public int diagonalSum(int value) {return diagonal_sum[index_map[value][0]][index_map[value][1]];}
}/*** 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);*/

总结:

方法为If-Else大法,算法上不是最优,优化该代码可采用预处理。

时间复杂度:初始化 O(n^2),其余 O(1) (n为grid的行数和列数)

空间复杂度:初始化 O(n^2),其余 O(1)。


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

相关文章

【Unity踩坑】Unity编辑器占用资源过高

在使用Unity 6 的编辑器时&#xff0c;尤其是打开URP项目后&#xff0c;发现笔记本电脑的风扇呼呼狂炫。 后来试着把Game中的Low Resolution Aspect Ratios打开后&#xff0c;温度神奇地下来了。 这不对比了一下&#xff0c;发现在关闭这个选项后&#xff0c;占用的资源主要是…

语义分割(semantic segmentation)

语义分割(semantic segmentation) 文章目录 语义分割(semantic segmentation)图像分割和实例分割代码实现 语义分割指将图片中的每个像素分类到对应的类别&#xff0c;语义区域的标注和预测是 像素级的&#xff0c;语义分割标注的像素级的边界框显然更加精细。应用&#xff1a…

汽车安全再进化 - SemiDrive X9HP 与环景影像系统 AVM 的系统整合

当今汽车工业正面临著前所未有的挑战与机遇&#xff0c;随著自动驾驶技术的迅速发展&#xff0c;汽车的安全性与性能需求日益提高。在这样的背景下&#xff0c;汽车 AVM&#xff08;Automotive Visual Monitoring&#xff09;标准应运而生&#xff0c;成为促进汽车智能化和安全…

docker有哪些网络模式

Docker 提供了多种网络模式&#xff08;Networking Modes&#xff09;&#xff0c;每种模式都有其特定的用例和优缺点。以下是 Docker 的几种主要网络模式&#xff1a; 1. Bridge 网络&#xff08;默认&#xff09; 描述&#xff1a;在这种模式下&#xff0c;Docker 创建了一…

PHP屏蔽海外IP的访问页面(源代码实例)

PHP屏蔽海外IP的访问页面&#xff08;源代码实例&#xff09;&#xff0c;页面禁用境外IP地址访问 <?php/*** 屏蔽海外ip访问* 使用ip2long函数得到ip转为整数的值&#xff0c;判断值是否在任一一个区间中* 以下是所有国内ip段* 调用方法&#xff1a;IschinaIp($ALLIPS)* …

⾃动化运维利器 Ansible-最佳实战

Ansible-最佳实战 一、ansible调试二、优化 Ansible 执行速度2.1 设置 SSH 为长连接2.1.1 设置 ansible 配置⽂件2.1.2 建⽴⻓连接并测试 2.2 开启 pipelining2.2.1 在 ansible.cfg 配置⽂件中设置 pipelining 为 True2.2.2 配置被控主机的 /etc/sudoers 文件 2.3 设置 facts 缓…

单片机智能家居火灾环境安全检测-分享

目录 前言 一、本设计主要实现哪些很“开门”功能&#xff1f; 二、电路设计原理图 电路图采用Altium Designer进行设计&#xff1a; 三、实物设计图 四、程序源代码设计 五、获取资料内容 前言 传统的火灾报警系统大多依赖于简单的烟雾探测器或温度传感器&#xff0c;…

【Android、IOS、Flutter、鸿蒙、ReactNative 】实现 MVP 架构

Android Studio 版本 Android Java MVP 模式 参考 模型层 model public class User {private String email;private String password;public User(String email, String password) {this.email = email;this.password = password;}public String getEmail() {return email;}…