题目如下:
我的解决办法:
遍历数组,当数组中对应元素个数不为1时,删除数组中第一个对应元素,否则继续遍历
具体代码实现如下:
nums=[1,1,1,1]
val = 2
class Solution:
def removeDuplicates(self, nums: list[int]):
if len(nums)<=1: #数组长度为0或者1时,不需要删除,直接返回数组长度
return len(nums)
else: #数组长度大于1时,删除重复元素并返回删除重复元素后的数组
for num in nums[:]:
if nums.count(num)!=1:
nums.remove(num)
return len(nums)
S=Solution() #实例化一个类
print(S.removeDuplicates(nums))
print(nums)
碰到的问题:
当数组长度大于1时,我最开始写的for循环的范围是:for num?in nums?后面在提交的时候有测试用例(由四个1组成的数组[1,1,1,1])出错了,但是试了很多其他的用例都没出错,不懂是什么原因。通过上网查找解决办法,看到有一篇博文写到出错的原因是:删除列表元素,导致列表内容改变,部分元素位置前移;当继续进行for循环时,索引继续加一,导致跳过一个元素。(具体参考:http://t.csdnimg.cn/QYmda)在[1,1,1,1]中被跳过的是第二个和第四个1(可以自己在纸上演算一遍),导致最后一个1的时候没有进入for循环,直接跳出来了,返回的结果是2,nums是[1,1]。后面将for num?in nums改成for num?in nums[:]后没有出错了。