删除元素

题意

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

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

样例

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

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

思路

设两个指针,一个指向当数组头,一个指向数组尾,将头指针依次想尾指针靠近,如果过程中有值等于要删除的值,则将尾指针的值与头指针的值交换,知道两个指针碰头。

代码实现

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

原题地址

LintCode:删除元素

坚持原创技术分享,您的支持将鼓励我继续创作!