本题是简单的模拟,但是对于多维数据的表示(x, y)本题更想探究一下array和tuple之间的区别。
array版本
class Solution { public: bool checkValidGrid(vector<vector<int>>& grid) { if(grid[0][0]) return false; int n = grid.size(); vector<array<int, 2>> v(n * n); for(int i = 0; i < n; i ++ ) { for(int j = 0; j < n; j ++ ) { v[grid[i][j]] = {i, j}; } } int lim = n * n; int x = 0, y = 0; for(int i = 1; i < lim; i ++ ) { int dx = abs(v[i][0] - x), dy = abs(v[i][1] - y); if(dx * dy != 2) return false; x = v[i][0], y = v[i][1]; } return true; } };
tuple版本
class Solution { public: bool checkValidGrid(vector<vector<int>>& grid) { if(grid[0][0]) return false; int n = grid.size(); vector<tuple<int, int>> v(n * n); for(int i = 0; i < n; i ++ ) { for(int j = 0; j < n; j ++ ) { v[grid[i][j]] = {i, j}; } } int lim = n * n; int x = 0, y = 0; for(int i = 1; i < lim; i ++ ) { auto [nx, ny] = v[i]; int dx = abs(nx - x), dy = abs(ny - y); if(dx * dy != 2) return false; x = nx, y = ny; } return true; } };
按照这样来看,tuple是比array快些的。