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

删除元素(LintCode)

时间:2015-12-05 20:55:56      阅读:243      评论:0      收藏:0      [点我收藏+]

标签:

删除元素

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

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

样例

给出一个数组 [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

 

 

 

删除元素(LintCode)

标签:

原文地址:http://www.cnblogs.com/FJH1994/p/5022094.html

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