栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

顺序表面试题 Leetcode27.移除元素

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

顺序表面试题 Leetcode27.移除元素

大家好!这篇我给大家讲解一下有关顺序表的题目,是力扣上面的,希望对大家有所帮助。

移除元素

难度:简单 OJ链接

解法一:
假设有这样的一组数组,val为2

我们可以写一个查找函数,来找val,找到后我们将后面的数据把val覆盖。过程如下:

代码如下:

//找到val的下标
int Find_val(int* nums, int numsSize, int val){
    for(int i=0;i 

当数组里全为2的时候,是最坏的情况,时间复杂度为O(N^2),空间复杂度为O(1)。

解法二:
把不是val的值,拷贝到新数组。然后把新数组里的数据拷回去。
这里的时间复杂度为O(N),空间复杂度也为O(N)(这里不符合题目要求,就不写了)。

解法三:
双指针。一个设为src,一个设为det。

1.当nums[src]不等于val,我们就将nums[dst]=nums[src],然后将src和dst都++一下。

2.当nums[src]==val,我们就将src++,dst不++。

此时,我们在按照第一条,2就会被3覆盖。

然后,src和dst都++。

按照第一条,nums[src]!=val,nums[dst]=nums[src]。

然后,src和dst都++

然后nums[src]!=val,nums[dst]=nums[src]。

然后,src和dst都++

当nums[src]==val,我们就将src++,dst不++。

可能有的人会问后面的0,4,2,怎么办?
我们可以看题目的意思返回移除后数组的新长度,不需要考虑数组中超出新长度后面的元素。
所以我们只需要返回dst的长度就行了。这样,我们就把不是val的值保留下来,是val的值给覆盖了。
代码如下:

总结:
如果大家认为我有哪些不足之处或者知识上的错误都可以告诉我,我会及时改正,也请大家多多包涵。如果大家觉得这篇文章有用的话,也希望大家可以给我关注点赞,你们的支持就是对我最大的鼓励,我们下一篇文章再见。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/767221.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号