leetcode2133.检查是否每一行每一列都包含全部整数(简单,周赛)

leetcode2133.检查是否每一行每一列都包含全部整数(简单,周赛)
leetcode2133.检查是否每一行每一列都包含全部整数(简单,周赛)
leetcode2133.检查是否每一行每一列都包含全部整数(简单,周赛)
leetcode2133.检查是否每一行每一列都包含全部整数(简单,周赛)
在自己的代码上做优化
1.用一个双循环实现行和列的同时访问:

for (int i = 0; i < n; ++i) {
	for (int j = 0; j < n; ++j) {
		//matrix[i][j]
		//matrix[j][i]
	}
}

2.看一下matrix[i][j]取值范围:放入hash后直接判断size()是否等于n就好了,不用跟存1-n的hash来比较。

class Solution {
public:
    bool checkValid(vector<vector<int>>& matrix) {
        //取值范围是0到n 直接用size()判断
        int n = matrix.size();
        for (int i = 0; i < n; ++i) {
            unordered_set<int> hash1, hash2;
            for (int j = 0; j < n; ++j) {
                hash1.insert(matrix[i][j]);
                hash2.insert(matrix[j][i]);
            }
            if (hash1.size() != n || hash2.size() != n) return false;
        }
        return true;
    }
};

3.再放入之前看一下该元素在hash是否存在,如果不存在才放,存在直接return false

class Solution {
public:
    bool checkValid(vector<vector<int>>& matrix) {

        int n = matrix.size();
        for (int i = 0; i < n; ++i) {
            unordered_set<int> hash1, hash2;
            for (int j = 0; j < n; ++j) {
                if (hash1.count(matrix[i][j])) return false;
                if (hash2.count(matrix[j][i])) return false;
                hash1.insert(matrix[i][j]);
                hash2.insert(matrix[j][i]);
            }
            //if (hash1.size() != n || hash2.size() != n) return false;
        }
        return true;
    }
};
上一篇:动态规划—路径下降和


下一篇:剑指 Offer 04. 二维数组中的查找