2596. 检查骑士巡视方案 (存储多维数据,tuple和array的速度差距)

发布时间 2023-09-13 10:00:32作者: 深渊之巅

 

本题是简单的模拟,但是对于多维数据的表示(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快些的。