이것은 내 기능입니다
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
auto i = nums.begin();
int prev = *i;
i++;
for(;i!=nums.end();i++){
if(*i == prev){
nums.erase(i);
}
prev = *i;
}
return (int)nums.size();
}
};
벡터를 참조로 호출하므로 중복이없는 수정 된 벡터의 길이를 반환해야합니다.
무엇이 문제이며 어떻게 답을 개선 할 수 있습니까?
std::vector::erase
이터레이터를 무효화하고 새 이터레이터를 반환하므로 반환 된 이터레이터를 잡아야합니다.
이 시도:
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
auto i = nums.begin();
int prev = *i;
i++;
for(;i!=nums.end();){
if(*i == prev){
i = nums.erase(i);
} else {
prev = *i;
i++;
}
}
return (int)nums.size();
}
};
또는 더 간단한 것 :
#include <algorithm>
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
auto i = std::unique(nums.begin(), nums.end());
nums.erase(i, nums.end());
return (int)nums.size();
}
};
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다