双指针
把新数组想象成一个栈,用一个指针维护栈顶位置
数组有序,要求每个元素最多保留两次。用 left 指向新数组的写入位置,比较 nums[right] 与 nums[left - 2],不同则写入,保证不会出现第三次重复。
时间复杂度
空间复杂度
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| class Solution { public int removeDuplicates(int[] nums) { int n = nums.length; if (n <= 2) { return n; } int left = 2, right = 2; while (right < n) { if (nums[right] != nums[left - 2]) { nums[left] = nums[right]; left++; } right++; } return left; } }
|