leetcode-27

45 阅读1分钟

双指针法

class Solution {
public:
    int removeElement(vector<int>& nums, int val) {
        int length = nums.size();
        if (nums.size()==0)
        {
            return 0;
        }
        int fastIndex = 0;
        int slowIndex = 0 ;
        for(;fastIndex < length;fastIndex++){
        if(nums[fastIndex]!=val){
            nums[slowIndex]=nums[fastIndex];
            slowIndex++;
        }
        }
        length = slowIndex;
        return length;
    }
};

暴力解法
如果在移动数组的时候写成j=i;j<length的形式,nums[j]=nums[j+1]会引发访问数组元素越界

class Solution {
public:
    int removeElement(vector<int>& nums, int val) {
        int length = nums.size();
        if (nums.size()==0)
        {
            return 0;
        }
        for(int i =0;i<length; i++)
        {
            if(nums[i]==val){
                //如果在移动数组的时候写成j=i;j<length的形式,nums[j]=nums[j+1]会引发访问数组元素越界
                for(int j = i + 1;j < length;j++)
                {
                    nums[j-1]=nums[j];
                }
            length--;
            i--;
            }
        }
        return length;
    }
};