Remove Element

一、题目

Given an array and a value, remove all instances of that value in place and return the new length.

The order of elements can be changed. It doesn't matter what you leave beyond the new length.

给出一个数组和一个值,在数组中移除这个值,并返回移除后的数组长度;移除过程中,数组剩余元素的排列方式可以改变

二、自己的解答

定义两个标号,i和j,分别指向数组的前后,当两个标号在一起时,判断最后一次

int removeElement(int* nums, int numsSize, int val) {
    int i = 0;
   int j = 0;
    int n = 0; 
    while(i <= numsSize - j - 1)            //当两个指针指向同一个值后结束
    {
        if(nums[i] == val)
           {
              nums[i] = nums[numsSize - j - 1];
              j++;
              n++;
              continue;
           }
         else
               i++;
    }
    return numsSize - n;
}

三、网上解答

class Solution {
public:
    int removeElement(vector<int>& nums, int val) {
         int cnt=0;  
    for(int i=0; i<nums.size(); i++)  
    {  
        if(nums[i]==val)
            cnt++;  
        else if (cnt>0)  
        {  
            nums[i-cnt] = nums[i];      //把后面的值一个个的赋值到前面来
        }  
    }  
    return nums.size()-cnt;  
    }
};
  • 个人觉得这个算法会比自己的时间复杂度高一些,因为如果出现了一个需要删除的数,则后面每个值都需要移动
posted @ 2015-09-23 09:04  dylqt  阅读(130)  评论(0编辑  收藏  举报