LeetCode: Queens That Can Attack the King Posted on August 5, 2019July 26, 2020 by braindenny Queens That Can Attack the King Similar Problems: CheatSheet: Leetcode For Code Interview CheatSheet: Common Code Problems & Follow-ups Tag: #graph On an 8×8 chessboard, there can be multiple Black Queens and one White King. Given an array of integer coordinates queens that represents the positions of the Black Queens, and a pair of coordinates king that represent the position of the White King, return the coordinates of all the queens (in any order) that can attack the King. Example 1: Input: queens = [[0,1],[1,0],[4,0],[0,4],[3,3],[2,4]], king = [0,0] Output: [[0,1],[1,0],[3,3]] Explanation: The queen at [0,1] can attack the king cause they're in the same row. The queen at [1,0] can attack the king cause they're in the same column. The queen at [3,3] can attack the king cause they're in the same diagnal. The queen at [0,4] can't attack the king cause it's blocked by the queen at [0,1]. The queen at [4,0] can't attack the king cause it's blocked by the queen at [1,0]. The queen at [2,4] can't attack the king cause it's not in the same row/column/diagnal as the king. Example 2: Input: queens = [[0,0],[1,1],[2,2],[3,4],[3,5],[4,4],[4,5]], king = [3,3] Output: [[2,2],[3,4],[4,4]] Example 3: Input: queens = [[5,6],[7,7],[2,1],[0,7],[1,6],[5,1],[3,7],[0,3],[4,0],[1,2],[6,3],[5,0],[0,4],[2,2],[1,1],[6,4],[5,4],[0,0],[2,6],[4,5],[5,2],[1,4],[7,5],[2,3],[0,5],[4,2],[1,0],[2,7],[0,1],[4,6],[6,1],[0,6],[4,3],[1,7]], king = [3,4] Output: [[2,3],[1,4],[1,6],[3,7],[4,3],[5,4],[4,5]] Constraints: 1 <= queens.length <= 63 queens[0].length == 2 0 <= queens[i][j] < 8 king.length == 2 0 <= king[0], king[1] < 8 At most one piece is allowed in a cell. Github: code.dennyzhang.com Credits To: leetcode.com Leave me comments, if you have better ways to solve. Solution // https://code.dennyzhang.com/queens-that-can-attack-the-king // Basic Ideas: array // // From King position, check all 8 directions. // And stop when it hits a queen or the boundries // // Complexity: Time O(n), Space O(n) func queensAttacktheKing(queens [][]int, king []int) [][]int { m := map[[2]int]bool{} for _, q := range queens { m[[2]int{q[0], q[1]}] = true } res := [][]int{} i, j := king[0], king[1] for x:=-1; x<=1; x++ { for y:=-1; y<=1; y++ { if x==0 && y==0 { continue } // keep searching this direction i2, j2 := i+x, j+y for i2>=0 && i2<8 && j2>=0 && j2<8 { if m[[2]int{i2,j2}] { res = append(res, []int{i2, j2}) break } i2, j2 = i2+x, j2+y } } } return res } Post Views: 0