Leetcode—— 26. 删除排序数组中的重复项(python)

26. 删除排序数组中的重复项

给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。

不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。

示例 1:

给定数组 nums = [1,1,2],

函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。

你不需要考虑数组中超出新长度后面的元素。
示例 2:

给定 nums = [0,0,1,1,1,2,2,3,3,4],

函数应该返回新的长度 5, 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4。

你不需要考虑数组中超出新长度后面的元素。
说明:

为什么返回数值是整数,但输出的答案是数组呢?

请注意,输入数组是以“引用”方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。

你可以想象内部操作如下:

// nums 是以“引用”方式传递的。也就是说,不对实参做任何拷贝
int len = removeDuplicates(nums);

// 在函数里修改输入数组对于调用者是可见的。
// 根据你的函数返回的长度, 它会打印出数组中该长度范围内的所有元素。
for (int i = 0; i < len; i++) {
print(nums[i]);
}

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路1:

题目要求删除重复的数字,也就是把不重复的数字往前移,因为不需要考虑数组中超出新长度后面的元素。

运用双指针的方法来做。

一个指针为 i,指向第一个元素位置,另一个指针为 j,指向第二个元素位置,判断这两个元素相不相等,如果这两个元素相等话,j 的位置加一,继续判断这两个位置的元素相不相等,如果这两个元素不相等,将 j 位置上的元素赋值给 i +1位置上,j 的位置加一,直到 j 的位置等于数组的长度,最后返回 i+1 的值。

程序代码1:

class Solution:
    def removeDuplicates(self, nums):
            if nums == 0:
                return 0
            i = 0
            j = 1
            while (j<len(nums)):
                if (nums[i] != nums[j]):
                    i += 1
                    nums[i] = nums[j]
                    j += 1
                else:
                    j += 1
            return i+1
 
 
nums = [0,0,1,1,1,2,2,3,3,4]
s = Solution()
print(s.removeDuplicates(nums))

解题思路2:

因为是有序的列表,采用暴力遍历,从后往前遍历,nums[i] 与 nums[i-1] 进行比较,相等的话,删除nums[i],直到遍历完毕,返回数组的长度。

程序代码2:

class Solution:
    def removeDuplicates(self,nums):
        for i in range(len(nums)-1,0,-1):
            if nums[i] == nums[i-1]:
                nums.pop(i)
        return len(nums)
 
nums = [0,0,1,1,1,2,2,3,3,4]
s = Solution()
print(s.removeDuplicates(nums))
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。