您的位置:首页 > 财经 > 产业 > 在线客服免费_软件开发项目流程_seo技术培训沈阳_会计培训班的费用是多少

在线客服免费_软件开发项目流程_seo技术培训沈阳_会计培训班的费用是多少

2024/12/22 7:01:53 来源:https://blog.csdn.net/qq_42761751/article/details/144315938  浏览:    关键词:在线客服免费_软件开发项目流程_seo技术培训沈阳_会计培训班的费用是多少
在线客服免费_软件开发项目流程_seo技术培训沈阳_会计培训班的费用是多少

题目链接:

80.删除有序数组中的重复项II

题目描述:
在这里插入图片描述

解题思路:

按照题目中要求,必须在原来数组中进行修改,并且在O(1)额外空间条件下完成。因此我们可以使用双指针算法,算法具体流程如下:

  • 如果数组长度 nums.size() <= 2, 则直接 return nums.size()即可
  • 定义两个指针 slowfast,并初始化为2
  • 如果 nums[slow - 2] == nums[fast],说明已经有两个数相等,因此 nums[fast] 数值不能放进结果之中。反之,如果nums[slow - 2] != nums[fast],那么nums[fast]可以放进nums[slow]中,并且slow++,记录结果的长度
  • fast>=nums.size()的时候,结束循环,返回数组长度slow

复杂度分析:

  • 时间复杂度O(n)
  • 空间复杂度O(1)

代码实现:

class Solution {
public:int removeDuplicates(vector<int>& nums) {int n = nums.size();if(n<=2){return n;}int slow = 2;int fast = 2;while(fast<n){if(nums[slow-2] != nums[fast]){nums[slow] = nums[fast];slow++;}fast++;}return slow;}
};

进一步可以优化掉快指针fast:

class Solution {
public:int removeDuplicates(vector<int>& nums) {int slow = 0;for(int num : nums){if(slow<2 ||  nums[slow-2] < num){nums[slow] = num;slow++;}}return slow;}
};

解题思路参考:
https://leetcode.cn/problems/remove-duplicates-from-sorted-array-ii/solutions/702869/ju-yi-fan-er-ni-zhen-de-zhen-de-zhi-de-x-eicz/?envType=study-plan-v2&envId=top-interview-150

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com