#include<stdio.h>
#include<stdlib.h>
/**
* @brief 删除数组中的重复的元素 给定了指定的元素
*
* @param argc
* @param argv
* @return int
*/
int removeElement(int* nums, int numsSize, int val){
#if 1
// 方法一:遍历数组然后覆盖掉值
int i=0;
while(i<numsSize)
{
if(nums[i]==val)
{
for ( int j = i+1; j <numsSize ; j++) //覆盖掉值
{
nums[j-1]=nums[j];
}
--numsSize; // 移除后数组的长度 -1
}
else
{
i++; // 遍历下一个值
}
}
return numsSize;
#endif
#if 0
// 方法二: 空间换时间
int k=0;
for (size_t i = 0; i < numsSize; i++)
{
if(nums[i]!=val)
{
nums[k++]=nums[i]; // 将不相等的值拿出来 放到新的数组里面,或者直接拿出来覆盖掉原来的值
}
}
return k;
#endif
#if 0
// 方法三: 双指针法
int pre=0;
int las=0;
while (pre<numsSize)
{
if(nums[pre]!=val)
{
nums[las++]=nums[pre++]; // 值不相等,利用指针保留值
}
else
{ pre++; // 值相等,找下一个
}
}
return las;
#endif
}
int main(int argc, char const *argv[])
{
int nums[5]={3,2,3,2,1};
int date;
date=removeElement(nums,5,1);
//printf("%d",date);
for (size_t i = 0; i < date; i++)
{
printf(" %d ",nums[i]);
}
return 0;
}