80ソートされた配列を削除/重複IIソートされた配列IIから重複を削除

ソートされた配列を考えるとNUMS、重複削除インプレース重複が多くて登場するように、二回にして、新しい長さを返します。

あなたがこれを行う必要があり、別のアレイのための余分なスペースを割り当てないでください入力配列の変更インプレースを O(1)余分なメモリで。

例1:

与えられたNUMS = [1,1,1,2,2,3]

あなたの関数は、長さ=を返すべきである5の最初の5つの要素と、numsであること1, 1, 2, 2及び3それぞれ。

あなたが返される長さを超えて残すかは重要ではありません。

例2:

与えられたNUMS = [0,0,1,1,1,1,2,3,3]

あなたの関数は=長さを返すべき7最初の7つの要素と、numsに変更され001123及び3それぞれ。

値が返された長さを超えて設定されているかは重要ではありません。

明確化:

混乱返される値は整数ですが、あなたの答えが配列である理由は?

入力アレイはによって渡されることに注意してください参照入力配列の修飾は同様に、発信者には公知であろう意味します。

内部的には、あなたはこれを考えることができます。

// NUMSは参照によって渡されます。(すなわち、コピーを作成せずに)
int型のlen = removeDuplicates(NUMS)。
//へのいかなる修正NUMSあなたの関数では、呼び出し側が知られているであろう。
//あなたの関数によって返された長さを使用して、それが最初に印刷さLENの要素を。
{ため(; iはLEN <I ++は、I = 0 INT)
プリント(NUMS [i])とします。
}

ACコード

class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
        if (nums.empty()) return 0;
        int tol = 1;
        for (int i = 1; i < nums.size(); ++i) {
            if (nums[i] == nums[i - 1]) {
                tol--;
                if (tol < 0) {
                    nums.erase(nums.begin() + i);
                    i--;
                }
            }
            else tol = 1;
        }
        return nums.size();
    }
};

概要

虎のように激しいタイトル説明

おすすめ

転載: blog.csdn.net/weixin_34281537/article/details/91028559