自学内容网 自学内容网

leetcode02——删除、“数” 重复元素

0.本节学到的知识——重复元素的删除

我的想法:remove是删除匹配到的第一个元素,那就for从头到尾循环,然后逐个删除就好啦!

想法存在的问题:如果你是从前往后(for i in range(0,len(nums)))循环查找删除,那么一定会报错,为什么?因为这种做法可能会导致某些元素没有被比较,比如说第一个匹配要删除的是 nums[2],我们的本意是继续nums[3]再比较,但是删除nums[2]后,元nums[3]的元素就会到2的位置,但是你i此时不为2,因为进行了i++,所以原来nums[3]这个元素就相当于没有被比较查找,这种混乱就会让系统报错。

怎么办呢?——从后往前删除

从前向后的失败在于删除操作 影响了后面未操作的数据,而从后向前遍历,删除某个元素后,后面的元素虽然向前挪动,但是我未操作的数据在前面,影响的仅仅是我操作过的数据,它不会影响未操作的数据,因此该方法可行。

for i in range(len(nums)-1,0,-1):
    if nums[i]==nums[i-1]:
        nums.pop(i)
        #或者nums.remove(nums[i])

"""一定要注意for括号里的条件,因为他是左闭右开,并且出现了nums[i-1],因此起始是len-1,末尾是0,(末尾是0就是i只能到1,所以i-1=0不会出现超纲)"""

如果就是单纯的让你删除某列表中与k相同的所有元素,那直接while即可:

while k in nums:
    nums.remove(k)

题目1:删除 与指定value相等  的所有元素

题目:

答案:


题目2:删除重复元素

题目:

答案:

题目3:删除重复元素进阶版——每个重复的元素保存两次

题目:

答案:

``````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````

1.本节学到的知识—— 对于重复元素确定数量、数量比较,怎么操作

比如说一个列表的许多元素是重复的,想让你找到重复次数超过k次的元素,

怎么办?——排序! 

排完序后遍历,看nums[i]?=nums[i+k-1]  #i到i+k-1是k个数!本身算一个!

这个方法有点巧妙,但是一定要注意这个个数、序号+1-1的问题,实在不行就去试试!

题目:查找多数元素

题目:

答案

还有就是:那个是 list1.sort() ; list1=sorted(list1,...) 


原文地址:https://blog.csdn.net/weixin_59924168/article/details/143832736

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!