• leetcode 26.删除有序数组中的重复项


    给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。

    考虑 nums 的唯一元素的数量为 k ,你需要做以下事情确保你的题解可以被通过:

    • 更改数组 nums ,使 nums 的前 k 个元素包含唯一元素,并按照它们最初在 nums 中出现的顺序排列。nums 的其余元素与 nums 的大小不重要。
    • 返回 k 

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

    我的解题思路:

    1. // 推导过程 (双指针)
    2. |
    3. 0,0,1,1,1,2,2,3,3,4
    4. |
    5. |
    6. 0,0,1,1,1,2,2,3,3,4
    7. |
    8. |
    9. 0,1,1,1,1,2,2,3,3,4
    10. |
    11. |
    12. 0,1,1,1,1,2,2,3,3,4
    13. |
    14. |
    15. 0,1,1,1,1,2,2,3,3,4
    16. |
    17. |
    18. 0,1,2,1,1,2,2,3,3,4
    19. |
    20. |
    21. 0,1,2,1,1,2,2,3,3,4
    22. |
    23. |
    24. 0,1,2,3,1,2,2,3,3,4
    25. |
    26. |
    27. 0,1,2,3,1,2,2,3,3,4
    28. |
    29. |
    30. 0,1,2,3,1,2,2,3,3,4
    31. |
    32. |
    33. 0,1,2,3,4,2,2,3,3,4
    34. |

    我的code:

    1. // 26. 删除有序数组中的重复项 (请你 原地 删除重复出现的元素)
    2. class Solution {
    3. public:
    4. int removeDuplicates(vector<int>& nums) {
    5. int i=0,j=1;
    6. if(nums.size()==0) return 0;
    7. if(nums.size() == 1) return 1;
    8. for(;isize() && jsize();) {
    9. while(j < nums.size() && (nums[i] == nums[j])) {
    10. j++;
    11. }
    12. ++i;
    13. if(isize() && jsize())
    14. nums[i] = nums[j];
    15. }
    16. return i;
    17. }
    18. };

    简化code

    1. // 简化
    2. class Solution {
    3. public:
    4. int removeDuplicates(vector<int>& nums) {
    5. if(nums.size()==0) return 0;
    6. int p=0,q=1;
    7. while(q < nums.size()) {
    8. if(nums[p]!=nums[q]) {
    9. nums[p+1] = nums[q];
    10. p++;
    11. }
    12. q++;
    13. }
    14. return p+1;
    15. }
    16. };

    官方code:

    1. class Solution {
    2. public:
    3. int removeDuplicates(vector<int>& nums) {
    4. int n = nums.size();
    5. if (n == 0) {
    6. return 0;
    7. }
    8. int fast = 1, slow = 1;
    9. while (fast < n) {
    10. if (nums[fast] != nums[fast - 1]) {
    11. nums[slow] = nums[fast];
    12. ++slow;
    13. }
    14. ++fast;
    15. }
    16. return slow;
    17. }
    18. };
    19. 作者:力扣官方题解
    20. 链接:https://leetcode.cn/problems/remove-duplicates-from-sorted-array/solutions/728105/shan-chu-pai-xu-shu-zu-zhong-de-zhong-fu-tudo/
    21. 来源:力扣(LeetCode)
    22. 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    复杂度分析

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

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

  • 相关阅读:
    防止会议被入侵,华为云会议更专业
    微信小程序开发整理-mp3
    【云原生】Kubernetes核心技术(上)
    听书网站模板源码 懒人书院网站源码 苹果cms手机听书网站模版源码 支持手机端
    罗景:连接效率优化实践
    模块化编程
    【两篇就够】异步相关(二)
    Ubuntu 的Linux内核更换操作流程
    SpringCloud 学习笔记总结 (三)
    【升职加薪秘籍】我在服务监控方面的实践(6)-业务维度的mysql监控
  • 原文地址:https://blog.csdn.net/weixin_41987016/article/details/132865443