问题:
给定一个有序数组,你需要原地删除其中的重复内容,使每个元素只出现一次,并返回新的长度。
不要另外定义一个数组,您必须通过用 O(1) 额外内存原地修改输入的数组来做到这一点。
思路:
这道题作为刷leetcode开题之作,写了好几个小时 ==,一直各种报错,原因是没好好读题,逻辑架构不清,之前一直返回修改后的数组,在自己编辑器里跑没问题,但是一提交答案就报错。这道题需要注意以下几点:
- 已知是有序列表了,因此无需排序,若需要排序可用 .sort(列表名),只需要比较相邻元素是否相同。
- 不能定义新的数组,百度得到的很多答案都是定义了新的数组,自己刚开始也忽略了这一点导致一直报错。
- 最后返回的是列表的长度
综上使用循环遍历数组,比较相邻元素是否相同,定义一个指针用于定位当前元素。
nums = [1,1,2]
if len(nums) == 0:
return 0
if len(nums) == 1:
return 1
index = 0
for i in nums[1:]:
if i != nums[index]:
index += 1
nums[index] = i
return index + 1
同时若题目无需结果是原来的顺序的话,可以使用python内置函数set()
nums = sorted(set(nums), key = nums.index)
网友评论