在自己的代码上做优化:
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;
}
};