# -*- coding:utf-8 -*-
class Solution(object):
"""
给定一个升序数组,原地删除重复的元素,使每个元素仅出现一次,返回不重复元素的长度。
元素的相对位置需保持一致
"""
def check(self, nums, k, expected_nums):
assert k == len(expected_nums)
for i in range(k):
assert nums[i] == expected_nums[i]
print('运行成功')
def removeDuplicates(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
# 实现
def main():
solution = Solution()
mynums = [1, 2, 2, 3, 4, 4, 4, 4, 7, 8, 8]
expected_nums = [1, 2, 3, 4, 7, 8]
# mynums = [3]
# expected_nums = [3]
# mynums = [1, 1, 1, 2, 5, 5, 6]
# expected_nums = [1, 2, 5, 6]
k = solution.removeDuplicates(nums=mynums)
solution.check(mynums, k, expected_nums)
if __name__ == '__main__':
main()
实现如下:
def removeDuplicates(self, nums):
if len(nums) < 2:
return len(nums)
# 结果列表最后一个元素的下标
r = 0
for i in range(1, len(nums)):
if nums[r] != nums[i]:
r += 1
nums[r], nums[i] = nums[i], nums[r]
# 返回下标加一,结果数组的长度
return r + 1
当然啦,毕竟是Python,还有想来更简单但更耗时的方法:
def removeDuplicates(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
i = 0
while i < len(nums) - 1:
if nums[i] == nums[i+1]:
del nums[i]
else:
i += 1
return len(nums)