当前位置:   article > 正文

【leetcode】26删除有序数组中的重复项(python & c++)_leetcode 删除有序数组中的重复项 python

leetcode 删除有序数组中的重复项 python

目录

题目

分析

代码

参考


题目

给你一个有序数组 nums ,请你原地 删除重复出现的元素,使每个元素只出现一次 ,返回删除后数组的新长度。

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

分析

方法1:双指针。因为当数组内的元素为0个时,直接返回0,当元素为1个时,直接返回元素本身,只有当元素数量>1时,需要处理,所以两个指针的起始位置均放在下标为1的地方,left指针为整理好的序列的尾部,right指针为为整理的序列的头部位置,将nums[right]和nums[right-1]比较,若不同,nums[right]赋值给nums[left],left指针右移一位,若相同,right指针继续右移。

复杂度分析

时间复杂度:O(n),其中 n是数组的长度。快指针和慢指针最多各移动 n 次。

空间复杂度:O(1)。只需要使用常数的额外空间。

代码

  1. # python
  2. 方法1:双指针
  3. class Solution:
  4. def removeDuplicates(self, nums: List[int]) -> int:
  5. if not nums:
  6. return 0
  7. n = len(nums)
  8. left,right = 1,1
  9. while right < n:
  10. if nums[right] != nums[right-1]:
  11. nums[left] = nums[right]
  12. left += 1
  13. right += 1
  14. return left
  15. 执行用时:40 ms, 在所有 Python3 提交中击败了57.86%的用户
  16. 内存消耗:15.5 MB, 在所有 Python3 提交中击败了17.59%的用户
  1. //c++
  2. 方法1:双指针
  3. class Solution {
  4. public:
  5. int removeDuplicates(vector<int>& nums) {
  6. int n = nums.size();
  7. if(n==0){
  8. return 0;
  9. }
  10. int left = 1,right = 1;
  11. while (right < n){
  12. if (nums[right] != nums[right-1]){
  13. nums[left] = nums[right];
  14. ++left;
  15. }
  16. ++right;
  17. }
  18. return left;
  19. }
  20. };
  21. 执行用时:12 ms, 在所有 C++ 提交中击败了57.86%的用户
  22. 内存消耗:18 MB, 在所有 C++ 提交中击败了6.45%的用户

参考

 26. 删除有序数组中的重复项 - 力扣(LeetCode) (leetcode-cn.com)

点个赞吧!

The end!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/50522
推荐阅读
相关标签
  

闽ICP备14008679号