这道题是让把一个数组中的某个特定值删去,返回新数组长度值,数组的其他部分可以放任意值,
我的思路是从前往后扫,如果遇到特定值就把它交换到末尾,然后数组长度减一。
如果数组数组末尾也是特定值则不交换直接所有元素往前一位覆盖此值,长度减一。
特殊情况:如果i正好到了数组末尾而且正好等于特定值,则既不能交换也不无法覆盖,这时候就直接将长度减一即可。
public int removeElement(int[] A, int elem) {
int num=A.length;
for(int i=0;i<num;i++){
if(A[i]==elem){
if(A[i]==A[num-1]&&i!=num-1){
for(int j=i;j<num-1;j++){
A[j]=A[j+1];
}
num--;
i--;
}else if(A[i]==A[num-1]&&i==num-1)
num--;
else{
int tmp = A[num-1];
A[num-1]=A[i];
A[i]=tmp;
num--;
}
}
}
return num;
}
Update 2015/07/26:
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) {
// write your code here
if (A.length == 0)
return 0;
int i = 0;
int j = A.length-1;
int tmp=0;
while (i<= j){
if (i == j){
if (A[i] == elem)
return i;
else
return i+1;
}else{
if (A[i] == elem){
tmp = A[i];
A[i] = A[j];
A[j] = tmp;
j--;
}else
i++;
}
}
return i;
}
}