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; } };
- 作者:GreekLee
- 链接:https://www.rusellwest.top/article/a69c74a3-a614-43c2-936f-0e006836bc13
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。