当前位置:   article > 正文

LeetCode(27)Remove Element_leetcode 27

leetcode 27

题目如下

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.

给定一个数组,数组中含有一些数,可能包含重复的元素。给定一个数element,要求把数组中等于element的元素删除之后返回新的数组的长度。本题比较好玩儿的一点儿是,结尾只要求返回新的数组的长度,并不要求返回新的数组。所以可以利用这一点来节省时间。

如果每次找到element都删除这个元素并且把剩下的元素依次向前挪动一位,显然太浪费时间。
考虑到只需要返回新的数组的长度,可以把element和数组的最后一位做个交换。这样不断地进行下去直到把数组的所有元素遍历一遍。最后element元素都在先前的交换过程中被放到了数组后面。
注意到每次做交换时,是把数组的当前最后一位和element做交换。当前最后一位可能仍然是需要删除的element,于是交换后的新元素也需要做检查。

代码如下

  1. class Solution {
  2. public:
  3. int removeElement(int A[], int n, int elem) {
  4. for(int i=0;i<n;i++){
  5. if(A[i]==elem){
  6. A[i]=A[n-1];
  7. i--;
  8. n--;
  9. }
  10. }
  11. return n;
  12. }
  13. };

update: 2014-10-09

因为题目是只要求返回n,所以除了交换这个办法,还可以用逐步生成新数组的方法,并且这个新数组覆盖原数组。 思路和这道题remove duplicates from sorted array目非常像

  1. class Solution {
  2. public:
  3. int removeElement(int A[], int n, int elem) {
  4. int keep_index = 0;
  5. for (int index = 0; index < n; ++index) {
  6. if (A[index] != elem) {
  7. A[keep_index] = A[index];
  8. ++keep_index;
  9. }
  10. }
  11. return keep_index;
  12. }
  13. };


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/611504
推荐阅读