leetcode 27 :移除元素

题目描述

leetcode 27 :移除元素

 

算法思想 :我们定义两个指针i,j,i表示从前扫描nums[i] == val的值,j从后扫描,如果nums[j] == val,则数组元素个数减少,j继续向前扫描,否则nums[j] != val,则把nums[i] = nums[j],表示把数组后面的不等于val的元素替换到前面去,因为题目不要求按照原来的顺序,最终i == j则终止.

 

    int removeElement(vector<int>& nums, int val) {
            int i = 0,j = nums.size()-1;
    int length = nums.size();
    if(length == 0)
        return 0;
    for(i = 0;i < nums.size();i++)
    {
        if(nums[i] == val)
        {
            while(nums[j] == val)
            {
                if(i == j)
                    break;    
                j--;
                length--;
            }
            if(i != j)
            {
                nums[i] = nums[j];
                j--;
                length--;    
            } 
            else 
            {
                length--;
                break;
            }    
        }
        if(i == j)
            break;
    }
            return length;
    }