https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/
並べ替えられた配列を指定した場合、繰り返されている要素を削除して、各要素が1回だけ表示されるようにし、削除後に配列の新しい長さを返す必要があります。
余分な配列スペースを使用しないでください。入力配列を適切に変更し、O(1)余分なスペースを使用して変更する必要があります。
例1:
与えられた配列nums = [1,1,2]、
関数は新しい長さ2を返し、元の配列numsの最初の2つの要素が1、2に変更されます。
新しい長さを超えて配列の要素を考慮する必要はありません。
例2:
与えられた数値= [0,0,1,1,1,2,2,3,3,4]、
関数は新しい長さ5を返す必要があり、元の配列numsの最初の5つの要素は0、1、2、3、4に変更されます。
新しい長さを超えて配列の要素を考慮する必要はありません。
解決策1
暴力法、時間の複雑さはより高いです!
解決策2
デュアルポインタートラバーサル方式16ms、7.5mb
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
if (nums.size() < 2) {
return nums.size();
}
size_t slow = 0, fast = 1;
while (fast < nums.size()) {
if (nums[fast] != nums[slow]) {
nums[++slow] = nums[fast];
}
fast++;
}
return ++slow;
}
};
EOF