题目链接:https://leetcode.cn/problems/remove-duplicates-from-sorted-array/
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
class Solution { public: int removeDuplicates(vector<int>& nums) { int size = nums.size(); // 记录数组的动态长度,也就是最终返回的长度 int removed = 0; // 记录每次删除的重复元素数量 int i = 0, j = 0; // 下标,用来比较元素是否重复 for (; i < size; i++) { // 遍历数组 j = i + 1; while (j < size && nums[j] == nums[i]) { // 后一段元素与当前元素相同,可能一个或多个重复 j++; } removed = j - 1 - i; // 计算出有几个重复的,后面要覆盖掉,并且返回的长度也要减去重复的个数 int left = i + 1; // 准备覆盖,这是左边起始位置 int right = j; // 准备覆盖,这是右边起始位置 while (right < size) { // 把右边所有剩余元素覆盖到左边 nums[left++] = nums[right++]; } size -= removed; // 去重后的数组长度 } return size; } }; |