您的位置:首页 > 其它

Leetcode_27_Remove Element

2014-11-28 19:13 316 查看
本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/41577997

Remove Element

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.

思路:

(1)这道题很简单。由于没有空间上的限制,很容易解决。

(2)本文的方法是创建一个链表,将和指定数字不同的元素放入链表,最后得到的链表长度即为所求长度。

(3)为了让移除后剩余的数字在默认顺序上,还必须还原数组的顺序,这里直接遍历链表,将其中元素对应到数组中。

(4)本文只是给出解题方法,由于技术有限,效率和空间的优化尚未涉及,对于大神来说,本文的算法就显得很垃圾了,不过也希望对你有所帮助。

算法所对应代码如下所示:

public static int removeElement(int[] A, int elem) {
int len = A.length;
if (len == 0)
return 0;
List<Integer> list = new LinkedList<Integer>();

for (int i = 0; i < len; i++) {
if (A[i] != elem) {
list.add(A[i]);
}
}

for (int i = 0; i < list.size(); i++) {
A[i] = list.get(i);
}

return list.size();
}

上题的算法只是针对数字,如果改为任意对象,那么我们在判断时,就不能用==来进行判断了,而是用equals()方法来进行值的判断。

从对象数组中移除值相同的指定对象并返回剩余对象个数的算法如下:

public static int removeObject(Object[] A, Object elem) {
int len = A.length;
if (len == 0)
return 0;
List<Object> list = new LinkedList<Object>();

for (int i = 0; i < len; i++) {
if (A[i].equals(elem)) {
list.add(A[i]);
}
}

A = new Object[list.size()];
for (int i = 0; i < list.size(); i++) {
A[i] = list.get(i);
}

return list.size();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: