给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使得出现次数超过两次的元素只出现两次 ,返回删除后数组的新长度。
不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。

提示:
1 <= nums.length <= 3 * 104-104 <= nums[i] <= 104nums 已按升序排列解析思路:这道题妙就妙在了一个地方,就是slow-2这个操作上,首先啊,我们肯定是要判断这个数组长度是否大于2,不大于2,直接返回长度即可,然后还是快慢指针,快指针在前,满指针灾后,但是判断的是nums[slow-2]和nums[fast]的值,如果相等,满指针不动,快指针向前,如果不相等,慢指针被赋值为快指针的值,并且慢指针向前移动。
- class Solution {
- public int removeDuplicates(int[] nums) {
- int n = nums.length;
- int fast = 2;
- int slow = 2;
- if(n<=2){
- return n;
- }
- while(fast
- if(nums[slow-2] !=nums[fast]){
- nums[slow] = nums[fast];
- ++slow;
- }
- ++fast;
- }
- return slow;
- }
- }

打完收工!