mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-09 03:34:02 +08:00
Update 0027.移除元素.md
添加27. 移除元素 C++版相向双指针方法,该方法基于元素顺序可以改变的题目描述,使用双指针法改变了元素相对位置,确保了移动最少元素
This commit is contained in:
@ -106,6 +106,37 @@ public:
|
|||||||
|
|
||||||
旧文链接:[数组:就移除个元素很难么?](https://programmercarl.com/0027.移除元素.html)
|
旧文链接:[数组:就移除个元素很难么?](https://programmercarl.com/0027.移除元素.html)
|
||||||
|
|
||||||
|
```CPP
|
||||||
|
/**
|
||||||
|
* 相向双指针方法,基于元素顺序可以改变的题目描述改变了元素相对位置,确保了移动最少元素
|
||||||
|
* 时间复杂度:$O(n)$
|
||||||
|
* 空间复杂度:$O(1)$
|
||||||
|
*/
|
||||||
|
class Solution {
|
||||||
|
public:
|
||||||
|
int removeElement(vector<int>& nums, int val) {
|
||||||
|
int leftIndex = 0;
|
||||||
|
int rightIndex = nums.size() - 1;
|
||||||
|
while (leftIndex <= rightIndex) {
|
||||||
|
// 找左边等于val的元素
|
||||||
|
while (leftIndex <= rightIndex && nums[leftIndex] != val){
|
||||||
|
++leftIndex;
|
||||||
|
}
|
||||||
|
// 找右边不等于val的元素
|
||||||
|
while (leftIndex <= rightIndex && nums[rightIndex] == val) {
|
||||||
|
-- rightIndex;
|
||||||
|
}
|
||||||
|
// 将右边不等于val的元素覆盖左边等于val的元素
|
||||||
|
if (leftIndex < rightIndex) {
|
||||||
|
nums[leftIndex++] = nums[rightIndex--];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return leftIndex; // leftIndex一定指向了最终数组末尾的下一个元素
|
||||||
|
}
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
## 相关题目推荐
|
## 相关题目推荐
|
||||||
|
|
||||||
* 26.删除排序数组中的重复项
|
* 26.删除排序数组中的重复项
|
||||||
|
Reference in New Issue
Block a user