Loading Now

[STLC++Set]uniqueRows

STLC++_SET

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

Contact