题目:移除元素
- 先对整个数组进行排序,将相同元素堆到一起
- 然后通过两次遍历找到重复元素的起始、终止下标
- 最后一键清除
1int removeElement(vector<int>& nums, int val)
2{
3 std::sort(nums.begin(), nums.end());
4 int start = 0;
5 while(start < nums.size() && nums[start] != val)
6 {
7 start++;
8 }
9 if(start == nums.size()) return nums.size();
10 int end = start;
11 while(end < nums.size() && nums[end] == val)
12 {
13 end++;
14 }
15
16 nums.erase(nums.begin() + start, nums.begin() + end);
17 return nums.size();
18}
快指针负责遍历整个数组,慢指针负责指向下一个“不等于 val”的元素的位置
如果 fast 指向的不是 val,就将这个元素放到前面去,最后 slow 前面的元素代表的就全是“不等于 val”的数字
1int removeElement(vector<int>& nums, int val)
2{
3 int slow = 0, fast = 0;
4 for(; fast < nums.size(); fast++)
5 {
6 if(nums[fast] != val)
7 {
8 nums[slow] = nums[fast];
9 slow++;
10 }
11 }
12 return slow;
13}
来源:语雀原笔记