LeetCode配列コラム:27.要素の削除(C版)

1268 ワード

テーマの説明:配列numsと値valを指定し、valに等しいすべての数値の要素をその場で除去し、除去後の配列の新しい長さを返す必要があります.注意:追加の配列空間を使用しないでください.入力配列をその場で変更し、O(1)追加空間を使用する条件で完了する必要があります.要素の順序は変更できます.配列の中で新しい長さの後ろを超える要素を考慮する必要はありません.
例1:
nums=[3,2,2,3]、val=3が与えられ、関数は新しい長さ2を返し、numsの最初の2つの要素は2である.配列の中で新しい長さの後ろを超える要素を考慮する必要はありません.
例2:
nums=[0,1,2,2,3,0,4,2]が与えられ、val=2であり、関数は新しい長さ5を返し、numsの最初の5つの要素は0,1,3,0,4であるべきである.配列の中で新しい長さの後ろを超える要素を考慮する必要はありません.
解題構想:この問題は比較的簡単で、考えやすい方法はnums配列を遍歴し、valと同じ値を無視してnums[i]!=valの場合nums[i]を前count個の位置に順次付与する.
複雑度解析:時間複雑度:nums配列を1回遍歴するのでO(n)空間複雑度:O(1)
次にACコードを貼り付けます.
int removeElement(int* nums, int numsSize, int val) {
    int count = 0;
    for(int i = 0; iif(nums[i] != val){
            nums[count++] = nums[i];
        }
    }
    return count;
}