力扣27.移除元素【顺序表】

简介: 力扣27.移除元素【顺序表】

🎈今日心语:你所看到的惊艳,都曾被平庸所历练。



前言:

在解题过程中一定要画图进行思考,然后再敲代码。


文章目录


移除元素

初学数据结构顺序表,要求时间复杂度为O(N),空间复杂度为O(1):力扣oj链接

题目要求:

题目分析:

思路1:

查找一个删除一个,与顺序表中查找的思路一样。

时间复杂度:O(N2),最坏的情况是数据基本都与val相等,删除一个的时间复杂度为O(N),删除N个为O(N2)。


思路2:

提供一个临时数组tmp,以空间换时间,不进行挪动。

当,src指向0时,0 != val , 此时将src指向的值赋值到dst指向的位置,src和dst都向后挪动以为,开始寻找下一个。若src指向的值等于val,则dst位置不变,src向后挪动。

最后用tmp中的值从起始位置覆盖原来的数据,释放tmp并改动size的位置以删除后面的元素。


思路3:

再优化,不创临时数组,直接在原始数据上进行操作,使用双指针。

时间复杂度O(N)

空间复杂度O(1)

开始时src和dst都指向初始位置,src负责和val进行比较,当src指向的值不等于val时,将这个值放到dst指向的位置,然后src和dst一起向后挪动。

当src指向的值=val时,dst不动,src向后偏移。

最终代码:

int removeElement(int* nums, int numsSize, int val)
{
int dst = 0,src = 0;
while(src<numsSize)//结束标志src>=numsize
{
     if(nums[src] == val)
     {
         src++;
     }
     else
     {
         nums[dst] = nums[src];
         src++;
         dst++;
     }
}
    return dst;//dst刚好是最后一个元素下一个位置,下标=size
}

为了减少代码量,也可以采取以下两种写法:

int removeElement(int* nums, int numsSize, int val)
{
int dst = 0,src = 0;
while(src<numsSize)//结束标志src>=numsize
{
     if(nums[src] == val)
     {
         src++;
     }
     else
     {
         nums[dst++] = nums[src++];
     }
}
    return dst;//dst刚好是最后一个元素下一个位置,下标=size
}
int removeElement(int* nums, int numsSize, int val)
{
int dst = 0,src = 0;
while(src < numsSize)//结束标志src>=numsize
{
     if(nums[src] != val)
         nums[dst++] = nums[src];
    src++;
}
    return dst;//dst刚好是最后一个元素下一个位置,下标=size
}

结语:

走到这里本题就介绍完了, 希望以上内容对大家有所帮助👀,如有不足望指出🙏

前路漫漫!努力变强💪💪 吧!!


相关文章
|
2月前
【力扣】-- 移除链表元素
【力扣】-- 移除链表元素
39 1
|
2月前
【LeetCode 27】347.前k个高频元素
【LeetCode 27】347.前k个高频元素
40 0
|
2月前
【LeetCode 06】203.移除链表元素
【LeetCode 06】203.移除链表元素
33 0
|
2月前
【LeetCode-每日一题】移除元素
【LeetCode-每日一题】移除元素
34 0
|
2月前
|
算法
【顺序表】算法题 --- 力扣
【顺序表】算法题 --- 力扣
|
4月前
|
存储 算法
LeetCode第83题删除排序链表中的重复元素
文章介绍了LeetCode第83题"删除排序链表中的重复元素"的解法,使用双指针技术在原链表上原地删除重复元素,提供了一种时间和空间效率都较高的解决方案。
LeetCode第83题删除排序链表中的重复元素
|
4月前
|
算法 索引
LeetCode第34题在排序数组中查找元素的第一个和最后一个位置
这篇文章介绍了LeetCode第34题"在排序数组中查找元素的第一个和最后一个位置"的解题方法,通过使用双指针法从数组两端向中间同时查找目标值,有效地找到了目标值的首次和最后一次出现的索引位置。
LeetCode第34题在排序数组中查找元素的第一个和最后一个位置
|
4月前
|
Python
【Leetcode刷题Python】剑指 Offer II 082. 含有重复元素集合的组合
解决LeetCode平台《剑指 Offer II 082. 含有重复元素集合的组合》题目的Python代码实现,通过深度优先搜索算法找出所有和为特定目标值的数字组合,并在搜索过程中通过排序和跳过重复元素来避免解集中出现重复组合。
43 2
|
4月前
|
算法
LeetCode第27题移除元素
这篇文章介绍了LeetCode第27题"移除元素"的解题方法,通过使用双指针技巧,有效移除数组中特定值的元素并返回新数组的长度。
|
4月前
|
算法 索引 Python
【Leetcode刷题Python】34. 在排序数组中查找元素的第一个和最后一个位置(二分查找)
解决LeetCode "在排序数组中查找元素的第一个和最后一个位置" 问题的方法。第一种方法是使用两次二分查找,首先找到目标值的最左边界,然后找到最右边界。第二种方法是利用Python的list.index()方法,先正序找到起始位置,再逆序找到结束位置,并给出了两种方法的Python实现代码。
69 0