我试图制作的程序采用大小为 n * n 的 n*n 方阵网格,其值在 [1,n2] 范围内。每个整数只出现一次,除了出现两次的数字“a”和缺失的数字“b”。任务是找到重复和缺失的数字a和b。 它应该返回一个由两个元素组成的向量,{a,b}。
即对于矩阵 {[1,2],[2,3]},它应该返回向量 {2,4}。
在我的程序中,我几乎可以肯定它逻辑上输出“a”和“b”。然而,它总是输出[a,0]。 'b' 始终为 0。 元素“b”永远不应该出现在地图中,因此 find 函数应该确定“b”的值。
vector<int> findMissingAndRepeatedValues(vector<vector<int>>& grid) {
int size = grid.size();
unordered_map<int,int> map;
for(int r = 0; r < size; r++) {
for(int c = 0; c < size; c++) {
map[grid[r][c]]++;
}
}
int a = 0;
int b = 0;
for(int i = 1; i < size*size + 1; i++) {
if(map[i] == 2) {
a = i;
}
else if(map.find(i) == map.end()) {
b = i;
}
}
return vector<int> {a,b};
}
正在添加正确创建的地图。我相信这与第二个 for 循环有关。
正如评论检查中其他人提到的那样,如果键 i 没有元素,则 if (map[i] == 2) 添加一个元素。您可以按如下方式修改第二个循环 -
for (int i = 1; i < size*size + 1; i++) {
if (map.find(i) != map.end()) {
if (mp[i] == 2) {
a = i;
}
} else {
b = i;
}
}