●🧑个人主页:你帅你先说.
●📃欢迎点赞👍关注💡收藏💖
●📖既选择了远方,便只顾风雨兼程。
●🤟欢迎大家有问题随时私信我!
●🧐版权:本文由[你帅你先说.]原创,CSDN首发,侵权必究。
📃题目
💡解题思路
思路一: 第一种思路是大家普遍能想到的,遍历一遍数组,把等于val
的值删除,然后后面的元素向前移,但这种方法的时间复杂度太高了,在数据非常多的情况下效率会非常低。
思路二: 这种思路只需要遍历一次数组就可以完成删除操作。
图解过程:
⚔️代码实现
法一:暴力移除
void SeqListPopFront(int* nums, int numsSize)
{
int begin = 1;
while (begin < numsSize)
{
nums[begin - 1] = nums[begin];
begin++;
}
}
int removeElement(int* nums, int numsSize, int val)
{
for (int i = 0; i < numsSize; i++)
{
if (nums[i] == val && i == numsSize - 1)
{
numsSize--;
}
else if(nums[i] == val)
{
SeqListPopFront(nums + i, numsSize-i);
i = i - 1;
numsSize--;
}
}
return numsSize;
}
法二:最优解(双指针)
int removeElement(int* nums, int numsSize, int val)
{
int src = 0;
int dst = 0;
while (src < numsSize)
{
if (nums[src] != val)
{
nums[dst] = nums[src];
src++;
dst++;
}
else
{
src++;
}
}
return dst;
}
觉得写的不错可以给个一键三连
点赞👍关注💡收藏💖(咱就是说白嫖这行为不好)