删除元素(LintCode)

删除元素

给定一个数组和一个值,在原地删除与值相同的数字,返回新数组的长度。

元素的顺序可以改变,并且对新的数组不会有影响。

样例

给出一个数组 [0,4,4,0,0,2,4,4],和值 4

返回 4 并且4个元素的新数组为[0,0,0,2]

 

思路就是把除删除元素外的元素移到最左边,r是最右端非被删除元素,可以在一开始就找到最右端非被删除元素。用i遍历数组,找到最左端被删除元素,把r所指元素赋到i位置即可。代码里我是先找最左端被删除元素,然后再找最右端非被删除元素。时间复杂度是相同的。

 

 1 public class Solution {
 2     /** 
 3      *@param A: A list of integers
 4      *@param elem: An integer
 5      *@return: The new length after remove
 6      */
 7     public int removeElement(int[] A, int elem) {
 8         int r = A.length - 1;
 9         if(r < 0) return 0;
10         int i = 0;
11         
12         while(r > i) {
13             if(A[i] == elem) {
14                 while(A[r] == elem && r > 0) r--;
15                 if(r > i) {
16                     A[i] = A[r];
17                     r--;
18                 }
19             }
20             i++;
21         }
22         
23         if(A[r] == elem) r--;
24         
25         return r + 1;
26     }
27 }
View Code

 

 

 

posted @ 2015-12-05 19:13  -.-|  阅读(321)  评论(0编辑  收藏  举报