classSolution { public: vector<vector<int>> differenceOfDistinctValues(vector<vector<int>>& grid) { int n = grid.size(), m = grid[0].size(); vector<vector<int>> ans(n, vector<int>(m)); for (int k = 0; k < m + n - 1; k++) { int i = k < m ? 0 : k - m + 1, j = k < m ? k : 0; ll se = 0; int d = 0; for (; i + d < n && j + d < m; d++) { ans[i + d][j + d] = __builtin_popcountll(se); se |= 1LL << grid[i + d][j + d]; } se = 0; for (d--; d >= 0; d--) { ans[i + d][j + d] = abs(ans[i + d][j + d] - __builtin_popcountll(se)); se |= 1LL << grid[i + d][j + d]; } } return ans; } };
classSolution: defdifferenceOfDistinctValues(self, grid: List[List[int]]) -> List[List[int]]: n, m = len(grid), len(grid[0]) ans = [[0] * m for _ inrange(n)] for k inrange(m + n - 1): i = 0if k < m else k - m + 1 j = k if k < m else0 se = d = 0 while i + d < n and j + d < m: ans[i + d][j + d] = se.bit_count() # python10才有 se |= 1 << grid[i + d][j + d] d += 1 se = 0 d -= 1 while d >= 0: ans[i + d][j + d] = abs(ans[i + d][j + d] - se.bit_count()) se |= 1 << grid[i + d][j + d] d -= 1 return ans
funcabs2711(a int)int { if a < 0 { return -a } return a }
funcdifferenceOfDistinctValues(grid [][]int) [][]int { n, m := len(grid), len(grid[0]) ans := make([][]int, n) for i := range ans { ans[i] = make([]int, m) } for k := 0; k < m + n - 1; k++ { var i, j int if k < m { i, j = 0, k } else { i, j = k - m + 1, 0 } se := uint64(0) d := 0 for ; i + d < n && j + d < m; d++ { ans[i + d][j + d] = bits.OnesCount64(se) se |= uint64(1) << grid[i + d][j + d] } se = 0 for d--; d >= 0; d-- { ans[i + d][j + d] = abs2711(ans[i + d][j + d] - bits.OnesCount64(se)) se |= uint64(1) << grid[i + d][j + d] } } return ans }