Untitled
unknown
csharp
9 months ago
1.2 kB
8
Indexable
public class NeighborSum {
private record Pair(int adjSum, dgSum);
int n;
Dictionary<int, Pair> map;
int[][] adjDir = new [
[0,1],[0,-1],[1,0],[-1,0]
];
int[][] dgDir = new [
[1,1],[1,-1],[-1,1],[-1,-1]
];
public NeighborSum(int[][] grid) {
map = new();
n = grid[0].Length;
if(n == 0)
return;
for(int x = 0;x<n;x++){
for(int y=0;y<n;y++){
int adj = 0;
int dg = 0;
for(int i=0;i<4;i++){ // 0,0
int nR = x + adjDir[i][0];
int nC = y + adjDir[i][1];
if(nR > 0 && nR < n && nC > 0 && nC < n){
adj += grid[nR][nC];
}
}
for(int i=0;i<4;i++){
int nR = x + dgDir[i][0];
int nC = y + dgDir[i][1];
if(nR > 0 && nR < n && nC > 0 && nC < n){
dg += grid[nR][nC];
}
}
map[grid[x][y]] = new Pair(adj, dg);
}
}
}
public int AdjacentSum(int value) {
// handle not available cases
if(map.Count == 0)
return -1;
if(map.ContainsKey(value))
return map[value].adjSum;
else
return -1;
}
public int DiagonalSum(int value) {
if(map.Count == 0)
return -1;
if(map.ContainsKey(value))
return map[value].dgSum;
else
return -1;
}
}Editor is loading...
Leave a Comment