QUS : 정렬 된 배열에서 중복 제거 정렬 된 배열이 주어지면 각 요소가 한 번만 나타나고 새 길이가 반환되도록 자리에서 중복을 제거하십시오. 우리가 원하는 비록 다른 배열에 대해 별도의 공간을 할당하지 마십시오정렬 된 배열에서 중복 제거
장소에서뿐만 아니라 원래의 배열을 변경해야합니다, 새 길이를 반환하는
주, 당신은 상수 메모리와 장소에서이 작업을 수행해야합니다 .
다음 코드를 시도했지만 아무도 내가 잘못 가고있는 부분을 도울 수 있습니까 ??
#include<iostream>
#include<vector>
using namespace std;
int removeDuplicates(vector<int> &A) {
int m=A.size();
if(m<=1) return m;
vector<int> :: iterator i=A.begin();
vector<int> :: iterator j=A.begin()+1;
vector<int> :: iterator temp;
while(i!=A.end() && j!=A.end())
{
while(j!=A.end() && *i == *j)
{
temp=j;
j++;
A.erase(temp);
}
i=j;
j++;
}
return A.size();
}
int main()
{
vector<int> vec={0,0,0,0,0,0,0,4,4,7,7,7,7,9};
cout<<"ans="<<removeDuplicates(vec);
return 0;
}
그리고 프로그램의 결과는 무엇입니까? 예상되는 결과는 무엇입니까? 디버거에서 한 줄씩 코드를 단계별로 실행하려고 시도 했습니까? –
바퀴를 재발 명하지 마십시오. ['std :: unique'] (http://en.cppreference.com/w/cpp/algorithm/unique)와 ['std :: vector :: erase'] (http://en.cppreference.com)을 사용하십시오./w/cpp/컨테이너/벡터/지우기). 'std :: unique'에 대한 링크는 이것이 어떻게 행해지는지 보여줍니다. – NathanOliver
'erase' 호출 후 모든 벡터의 반복자가 유효하지 않게되었습니다. 당신은 색인을 가지고 더 잘 작업합니다. –