【Leetcode C++】27.要素の除去

1680 ワード

配列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です.
この5つの要素は任意の順序で使用できます.
配列の中で新しい長さの後ろを超える要素を考慮する必要はありません.
ソース:力ボタン(LeetCode)リンク:https://leetcode-cn.com/problems/remove-element著作権はインターネットの所有に帰属する.商業転載は公式の授権に連絡してください.非商業転載は出典を明記してください.
class Solution {
public:
    int removeElement(vector& nums, int val) {
        int len = nums.size();
       /*  1:
         int i,j;
        int temp;
        int count = 0;
        if(len == 1 && nums[0] == val)
        {
            return 0;
        }
        for(i = 0,j = len-1;i <= j;i++)
        {
            if(val == nums[i])
            {
                while(val == nums[j] && i != j)
                {
                    j--;
                    if(j == 0)
                    {
                        return 0;
                    }
                    count++;
                }
                temp = nums[i];
                nums[i] = nums[j];
                nums[j] = temp ;
                j--;
                count++ ;
            }
        }
        return (len - count);
        */

        /*  2*/
        int i,count = 0;
        for(i = 0;i < len;i++)
        {
            if(val != nums[i])
            {
                nums[count++] = nums[i];
            }
        }
        return count;
    }
};