首页 > 代码库 > Remove Element -- leetcode
Remove Element -- leetcode
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
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。