首页 > 试题广场 >

删除元素

[编程题]删除元素
  • 热度指数:16098 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解

给定一个数组和一个值,使用就地算法将数组中所有等于这个值的元素删除,并返回新数组的长度。

元素的顺序可以更改。你不用去关心大于当前数组长度的空间里面存储的值
    //这里按照调试的评判标准,输出的不为升序数组

    int nail = A.length;  //注意考虑length-1情况,所以nail不为length-1
    if (A.length == 0) {
        return 0;
    }

    for (int index = 0; index < A.length; index++) {
        if (A[index] == elem) {
            while ((nail > index) && (A[--nail] == elem)) {  
                //找到index位置后,nail前面的elem
            }
            A[index]=A[nail];
        }
    }
    return nail; //nail是旧数组后面第一次被换成elem的位置,所以等于新数组的长度

发表于 2020-09-25 09:59:41 回复(0)
public class Solution {
    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 j+1;
    }
}

发表于 2020-06-17 14:39:13 回复(0)
public class Solution {
    public int removeElement(int[] A, int elem) {
        int len = A.length;
        for(int i = 0; i<len ;){
            if(A[i]==elem && i != len-1){
                A[i]=A[len-1];
                A[len-1]=0;
                len--;
            }else if(A[i]!=elem){
                 i++;
            }
            else{
                A[len-1]=0;
                len--;
            }
        }
        return len;
    }
}

发表于 2020-04-21 16:19:25 回复(0)
//遍历数组,若数组元素A[i]与elem相等,则将数组最后一个元素替换A[i],数组长度减一(相当于取代A[i]位置)
//由于最后一个数组元素也可能等于elem,因此需要再次判断当前位置(替换后的A[i]),执行i--操作,使循环回到当前遍历位置
public class Solution {
    public int removeElement(int[] A, int elem) {
        if(A == null || A.length == 0)
            return 0;
        int len = A.length;
        for(int i = 0; i < len; i++){
            if(A[i] == elem){
                 A[i] = A[len-1];
                 len--;
                 i--;
            }
        }
        return len;
    }
}

编辑于 2019-07-02 12:13:29 回复(0)
public class Solution {
    public int removeElement(int[] A, int elem) {
        int left = 0;
        int right = A.length-1;
        while(left<=right) {
            if(A[left]==elem) {
                A[left] = A[right];
                right--;
            }else {
                left++;
            }
        }
        return left;
    }
}
题目描述:给定一个数组 和一个 num  要求删除 数组中 与num相等的所有元素  删除后的数组 元素顺序可以更改 要求返回 删除这些元素后 还剩多少个元素 并返回剩下的元素个数
示例: A={1,2,3,1,1,2,3,5,6,1} num=1 删除所有的1 后  应该返回 6
解题思路:定义left right 两个指针 指向数组的左后右  1.当left指向的元素等于num时  把right指向的值 赋值给 left 指向的值 right减一  left 不作操作 因为交换过去的值 也许和num的值也一样 所以 还要进行判断  2 当left指向的值不等于num时  left++  具体操作见代码

发表于 2019-05-28 20:28:16 回复(0)
public class Solution {
    public int removeElement(int[] A, int elem) {
        if(A.length==0 || A==null) return 0;
        int count = 0;
        int i=0;
        while(i<A.length-count){
            if(A[i]==elem){
                count++;
                A[i] = A[A.length-count];
            }
            else{
                i++;
            }
        }
        return A.length-count;
    }
}

发表于 2018-07-11 09:57:40 回复(0)
int removeElement(int A[], int n, int elem) {
    
    int begin=0;
    
    for(int i=0;i<n;i++) if(A[i]!=elem) A[begin++]=A[i];
    
    return begin;
}
}

发表于 2017-03-12 23:21:15 回复(0)