leedcode做题总结,题目Remove Element 2012/02/16

这道题是让把一个数组中的某个特定值删去,返回新数组长度值,数组的其他部分可以放任意值,

我的思路是从前往后扫,如果遇到特定值就把它交换到末尾,然后数组长度减一。

如果数组数组末尾也是特定值则不交换直接所有元素往前一位覆盖此值,长度减一。

特殊情况:如果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;
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值