Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Solution {
- public int[] gridIllumination(int N, int[][] lamps, int[][] queries) {
- Map<Integer,Integer> rowMap = new HashMap<>();
- Map<Integer,Integer> colMap = new HashMap<>();
- Map<Integer,Integer> diagnalMap = new HashMap<>();
- Map<Integer,Integer> antiDiagonalMap = new HashMap<>();
- Set<String> lampLocation = new HashSet<>();
- for(int[] lamp : lamps)
- {
- int x = lamp[0];
- int y = lamp[1];
- lampLocation.add(x+"->"+y);
- addToMap(rowMap,x);
- addToMap(colMap,y);
- addToMap(diagnalMap,x+y);
- addToMap(antiDiagonalMap,x-y);
- }
- int[][] dicts = {{-1,-1},{-1,0},{1,1},{0,-1},{0,1},{1,-1},{1,0},{1,1}};
- int[] result = new int[queries.length];
- for(int i = 0 ; i < queries.length ; i++)
- {
- int x = queries[i][0];
- int y = queries[i][1];
- if(rowMap.containsKey(x)
- || colMap.containsKey(y)
- || diagnalMap.containsKey(x+y)
- || antiDiagonalMap.containsKey(x-y))
- result[i] = 1;
- for(int[] dict : dicts)
- {
- int newX = x + dict[0];
- int newY = y + dict[1];
- String location = newX + "->" + newY;
- if(valid(N,newX,newY) && lampLocation.contains(location))
- {
- lampLocation.remove(location);
- substractMap(rowMap,newX);
- substractMap(colMap,newY);
- substractMap(diagnalMap,newX+newY);
- substractMap(antiDiagonalMap,newX - newY);
- }
- }
- }
- return result;
- }
- public boolean valid(int N,int x,int y)
- {
- return x>=0 && y >= 0 && x < N && y < N;
- }
- public void substractMap(Map<Integer,Integer> map,int val)
- {
- if(!map.containsKey(val))
- return;
- map.put(val,map.get(val)-1);
- if(map.get(val) ==0)
- map.remove(val);
- }
- public void addToMap(Map<Integer,Integer> map, int val)
- {
- map.compute(val,(k,v)->{
- if(v == null)
- return 1;
- return v + 1;
- });
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement