移除给定元素
问题:
给定一个数组 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;}
说明:此文章为学习笔记,如有侵权请联系删除。