LeetCode算法题之26. Remove Duplicates from Sorted Array(easy)

声明:

因本人为AI路上的新手,文章用于辅助个人的整理记忆,理解难免有偏差之处,都是个人拙见,如给其他同僚造成困扰,还请见谅,非常非常非常欢迎私信共同讨论,共同进步

题目描述:
Given a sorted array nums, remove the duplicates in-place such that each element appear only once and return the new length.

Do not allocate extra space for another array, you must do this by modifying the input array in-place with O(1) extra memory.

Example 1:

Given nums = [1,1,2],

Your function should return length = 2, with the first two elements of nums being 1 and 2 respectively.

It doesn’t matter what you leave beyond the returned length.

Example 2:

Given nums = [0,0,1,1,1,2,2,3,3,4],

Your function should return length = 5, with the first five elements of nums being modified to 0, 1, 2, 3, and 4 respectively.

It doesn’t matter what values are set beyond the returned length.

Clarification:

Confused why the returned value is an integer but your answer is an array?

Note that the input array is passed in by reference, which means modification to the input array will be known to the caller as well.

Internally you can think of this:

// nums is passed in by reference. (i.e., without making a copy)
int len = removeDuplicates(nums);

// any modification to nums in your function would be known by the caller.
// using the length returned by your function, it prints the first len elements.
for (int i = 0; i < len; i++) {
print(nums[i]);
}

解题思路:

  • 首先解释一下题目中容易让人困惑的地方,题意为,给定一个整理好的列表,包含一些重复的元素,编写代码,将重复的元素去除,且返回值为整理后的列表的长度
  • 需要注意的是,题目要求为,在给定的原列表上进行移动(remove)操作,不要新增额外的自定义的一个列表,返回值为不重复元素的长度
  • 既然是去除重复的元素,且给定的是一个整理好的列表,就遍历整个列表,寻找和第一个元素不同的数,记录下来,使它排到第一个元素的后面,此时再将找到的那个数,作为寻找下一次和他不同的那个元素,如此循环,便大功告成
  • 见代码,一目了然

少废话,上代码:

class Solution:
    def removeDuplicates(self, nums) -> int:
        n = 0#先给定第一个元素的索引,用来记录不同的数的索引
        for i in range(1, len(nums)):#直接从第二个元素开始循环
            init_s = nums[n]
            if nums[i] != init_s:
                n += 1#如遇到不相同的数,索引加一
                nums[n] = nums[i]#将那个不同的数赋值给第二个元素
        return n + 1#返回值正好是索引移动数的加1

时间空间复杂度:

  • Runtime: 88 ms, faster than 56.46% of Python3 online submissions for Remove Duplicates from Sorted Array.
  • Memory Usage: 14.8 MB, less than 54.10% of Python3 online submissions for Remove Duplicates from Sorted Array.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值