type
Post
status
Published
date
Jun 13, 2023
slug
summary
给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使得出现次数超过两次的元素只出现两次 ,返回删除后数组的新长度。
tags
leetcode
c++
category
算法
icon
password

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

提示:这两题可以结合着看,懂了一个就懂第二个题了,举一反三

1.题解

双指针,fast遍历整个nums,slow表示符合规定的元素个数,nums[fast]表示当前待检查的元素,nums[slow-1]表示上一个非重复的元素,nums[fast]≠nums[slow-1],即当前要判断的数不等于上一个非重复的元素,说明nums[fast]没有在slow中出现过,可以把他赋值给nums[slow]

2.代码

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

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

题解

双指针,fast遍历整个nums,slow表示符合规定的元素个数,因为本题要求相同元素最多重复两次,所以检查上上个应该被保留的元素。
nums[fast]表示当前待检查的元素,nums[slow-2]表示上上个非重复的元素,nums[fast]≠nums[slow-2],即当前要判断的数不等于上上个非重复的元素,说明nums[fast]没有在slow中出现过,可以把他赋值给nums[slow]

代码

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