[1日に1つの質問]ソートされた配列の重複する項目を削除します

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

98件のオリジナル記事が公開されました 91件の賞賛 40,000回以上の閲覧

おすすめ

転載: blog.csdn.net/Hanoi_ahoj/article/details/105336477