#3242
Easy Algorithms Design neighbor sum service
Array Hash Table Design Matrix Simulation
76.4% acceptance
Feb 25, 2026
117
19
You are given a n x n 2D array grid containing distinct elements in the range [0, n2 - 1].
Implement the NeighborSum class:
NeighborSum(int [][]grid) initializes the object.
int adjacentSum(int value) returns the sum of elements which are adjacent neighbors of value.
int diagonalSum(int value) returns the sum of elements which are diagonal neighbors of value.
Solution
Rust
Time O(n²)
Space O(n)
pub struct NeighborSum {
// pos[v] = (row, col) for value v
pos: Vec<(i32, i32)>,
grid: Vec<Vec<i32>>,
n: i32,
}
impl NeighborSum {
pub fn new(grid: Vec<Vec<i32>>) -> Self {
let n = grid.len();
let mut pos = vec![(0i32, 0i32); n * n];
for i in 0..n {
for j in 0..n {
pos[grid[i][j] as usize] = (i as i32, j as i32);
}
}
NeighborSum { pos, grid, n: n as i32 }
}
pub fn adjacent_sum(&self, value: i32) -> i32 {
let (r, c) = self.pos[value as usize];
let dirs = [(-1, 0), (1, 0), (0, -1), (0, 1)];
let mut sum = 0;
for (dr, dc) in dirs {
let nr = r + dr;
let nc = c + dc;
if nr >= 0 && nr < self.n && nc >= 0 && nc < self.n {
sum += self.grid[nr as usize][nc as usize];
}
}
sum
}
pub fn diagonal_sum(&self, value: i32) -> i32 {
let (r, c) = self.pos[value as usize];
let dirs = [(-1, -1), (-1, 1), (1, -1), (1, 1)];
let mut sum = 0;
for (dr, dc) in dirs {
let nr = r + dr;
let nc = c + dc;
if nr >= 0 && nr < self.n && nc >= 0 && nc < self.n {
sum += self.grid[nr as usize][nc as usize];
}
}
sum
}
}