码迷,mamicode.com
首页 > 其他好文 > 详细

OJ练习12——T27 Remove Element

时间:2015-04-13 16:22:56      阅读:143      评论:0      收藏:0      [点我收藏+]

标签:

删掉数组中与给出值相同的元素,返回新长度。

“The order of elements can be changed. It doesn‘t matter what you leave beyond the new length.”(!这是重点提示!)

【思路】

题目有了第二句就很好办了,数组顺序可以改变,超过新长度的可以不计,那么就要两个标记(指针)ij。<-双指针思想

i从前向后遍历,j从后向前,A[i]==elem时,swap(A[i], A[j])。

【my code】

int removeElement(int A[], int n, int elem) {
    int i,j;
    int length=n;
    for(i=0, j=n-1; i<=j; i++)
    {
        while(A[j]==elem&&j>=0){
            j--;
            length--;
        }
        if(A[i]==elem&&j>0){
            A[i]=A[j];
            A[j]=elem;
            j--;
            length--;
        }
    }
    return length;
}

【other code】

    int removeElement(int A[], int n, int elem) {
        // Start typing your C/C++ solution below
        // DO NOT write int main() function
        int start = 0;
        for(int i = 0; i < n; i++)
            if (elem != A[i])
            {
                A[start++] = A[i];
            }
            
        return start;
    }

【评价】

别人的代码总是这么漂亮╮(╯﹏╰)╭

总结:双指针思想。

问题求相等/重复,就要反着思考,找到要保留的元素,从前到后按序重写,因为用来寻找的指针总是快于重写的指针,所以不会有漏掉要保留元素的情况。

切记这种思路,要省很多事。

【经验】

leecode的测试结果如果是Runtime Error,一般是因为有特殊情况没考虑到。

常常在输入参数非常小的情况。

OJ练习12——T27 Remove Element

标签:

原文地址:http://www.cnblogs.com/ketchups-notes/p/4422241.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!