Given an array and a value, remove all instances of that value in place and return the new length.
Do not allocate extra space for another array, you must do this in place with constant memory.
The order of elements can be changed. It doesn't matter what you leave beyond the new length.
Example:
Given input array nums = [3,2,2,3]
, val = 3
介绍2种方法:
第一种:
将exmple模拟一下就可以知道怎么做了。
选择一个beginIndex 和 endIndex来标记数组的搜索位置的开始与结束;
类似插入排序的思想,如果nums[ beginIndex ] = val , 将下标为 beginIndex + 1, ... endIndex的值全部向前移动1位。
运行时间:
代码:
public class RemoveElement {
public int removeElement(int[] nums, int val) {
int beginIndex = 0;
int endIndex = nums.length - 1;
while (beginIndex <= endIndex) {
if (nums[beginIndex] == val) {
endIndex--;
for (int i = beginIndex; i <= endIndex; i++) {
nums[i] = nums[i + 1];
}
} else {
beginIndex++;
}
}
return endIndex + 1;
}
}
第二种:
很巧妙的做法。
public int removeElement2(int[] nums, int val) {
int m = 0;
for (int i = 0; i < nums.length; i++) {
if (nums[i] != val) {
nums[m] = nums[i];
m++;
}
}
return m;
}
参考:
https://leetcode.com/discuss/29356/accepted-java-solution