> 文档中心 > 移除给定元素

移除给定元素

问题:
  给定一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度

方法一:暴力解法

#include #include int removeElement(int* nums, int numsSize, int val);/*--------------暴力解法----------------------------*/int main(){int val = 3;  //需要删除的数据    int a[] = {1,4,3,6,3,6,9,3,3,0};  //原数组    int length = sizeof(a) / sizeof(a[0]);  //计算数组长度    for(int i = 0;i < length;i++)//遍历数组    { if(a[i] == val) {   //若找到需要删除数据,数组前移一位,长度减一     for(int j = i;j < length;j++)     {  a[j] = a[j + 1];      }     i --;   //下标前移一位     length --;  //长度减一 }    }    printf("数组长度为:%d\n",length);//输出删除后数据长度    for(int i= 0;i < length;i++)//输出删除后数组元素    {  printf("删除后数组:%d\n",a[i]);    }    printf("数组长度为:%d\n",removeElement(a,10,3));    system("pause");    return 0;}

方法二:双指针

/*-------------------双指针解法---------------------------*/int removeElement(int* nums, int numsSize, int val){    int slow = 0;    for(int fast = 0; fast < numsSize; fast++) { //若快指针位置的元素不等于要删除的元素 if(nums[fast] != val) {     //将其挪到慢指针指向的位置,慢指针+1     nums[slow ++] = nums[fast];  }     }    //最后慢指针的大小就是新的数组的大小    return slow;}

说明:此文章为学习笔记,如有侵权请联系删除。