删除重复项——双指针
原题在这里:
概述题意:要求在常数额外空间条件下处理数组元素保证重复次数不超过2次,修改数组并返回数组长度。
analyse:
属于是经典题目了,双指针,左指针为实际数组下标,右指针移动进行判定。
初始code:
class Solution { public: int removeDuplicates(vector<int> &nums) { int n = nums.size(), ans = n; int l = 0, r = 0, p = 0;//l记录r移动长度l-r+1即表示重复次数,p为实际数组下标,ans记录数组长度 while (r < n) { if (nums[r] != nums[l]) { nums[p++] = nums[r]; l = r++; } else { if (r < l + 2) nums[p++] = nums[r]; else --ans; ++r; } } return ans; } };
精简code:
class Solution { public: int removeDuplicates(vector<int> &nums) { int n = nums.size(); if (n <= 2) return n; int r = 1, l = 2; while (++r < n) if (nums[r] ^ nums[l - 2]) nums[l++] = nums[r]; return l; } };
【Over】

浙公网安备 33010602011771号