
[STLC++Set]uniqueRows
Bài tập.
Cho một ma trận gồm các dãy nhị phân khác nhau.
Hãy đưa ra các dãy nhị phân khác nhau trong ma trận đó.
Ví dụ:
- Với
matrix =
[[1,1,0,1],
[1,0,0,1],
[1,1,0,1]].
thì đầu ra sẽ là:uniqueRow(matrix) =
[[1,1,0,1],
[1,0,0,1]]
.
Lý thuyết.
Khi duyệt các phần tử trong vector
chúng ta phải làm quen với 1 kiểu dữ liệu là iterator, hiểu đơn giản thì đây là một con trỏ.
Ta cũng cần chú ý là 2
phương thức là begin() và end(), hai phương thức này sẽ trả về con trỏ của phần tử thứ nhất và con trỏ ở sau phần tử cuối cùng.
Để duyệt vector
theo chiều thuận (từ trái qua phải) ta làm như sau:
for (vector<int>::iterator it = a.begin(); it !=a.end(); it++)
hoặc
for (vector<int>::const_iterator it = a.cbegin(); it !=a.cend(); it++)
Cách duyệt phía dưới cũng giống cách trên, nhưng với cách dưới, bạn không thể thay đổi giá trị mà con trỏ đang trỏ đến (Không thể gán *it=...
).
Để duyệt vector
theo chiều nghịch (từ phải qua trái) ta làm như sau:
for (vector<int>::reverse_iterator it = a.rbegin(); it != a.rend(); it++)
Hướng dẫn:
Code mẫu:
std::vector<std::vector<int>> uniqueRows(std::vector<std::vector<int>> matrix)
{
set<vector<int>> s;
vector<vector<int>> result;
for(std::vector<std::vector<int>>::iterator it = matrix.begin();it!=matrix.end();it++){
if(!s.count(*it)){
s.insert(*it);
result.push_back(*it);
}
}
return result;
}
Post Comment