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

Remove Element -- leetcode

时间:2014-12-29 12:07:24      阅读:141      评论:0      收藏:0      [点我收藏+]

标签:leetcode   面试   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.



算法一:双指针向后移动

此算法在leetcode上执行时间为36ms。

class Solution {
public:
    int removeElement(int A[], int n, int elem) {
        int num = 0;
        for (int i=0; i<n; i++) {
                if (A[i] != elem)
                        A[num++] = A[i];
        }
        return num;
    }
};
算法虽然是O(n),但缺点是数据移动量大。

只要存在一个和elem相同的元素,那意味其后的元素都需要移动。


算法二:首尾双指针向中间移动

此算法可以大量减少移动操作。当遇到和elem相同的元素时,从数组尾部取数来填充。

此算法在leetcode上执行时间为20ms。 比算法一用时明显减少。

class Solution {
public:
    int removeElement(int A[], int n, int elem) {
        int num = 0;
        while (num < n) {
                if (A[num] == elem)
                        A[num] = A[--n];
                else
                        ++num;
        }
        return num;
    }
};


Remove Element -- leetcode

标签:leetcode   面试   remove   element   链表删除   

原文地址:http://blog.csdn.net/elton_xiao/article/details/42236011

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