今天刷的LeetCode编程题目是27.移除元素,以下是学习笔记:
这道题可以把输出的数组直接写在输入数组上,使用双指针:fast指针指向当前将要处理的元素,slow指针指向下一个将要赋值的位置。
1、如果fast指针指向的元素不等于val,它一定是输出数组的一个元素,我们就将fast指针指向的元素复制到slow指针的位置,然后将fast、slow指针同时右移;
2、如果fast指针指向的元素等于val,它不能在输出数组里,此时slow指针不动,fast指针右移一位。
算例:
代码的输出结果与算例结果完全吻合:
int removeElement(vector<int>& nums, int val) {
int slow = 0;
int n = nums.size();
for (int fast = 0; fast<n; ++fast)
{
if (nums[fast] != val)
{
nums[slow] = nums[fast];
++slow;
}
cout << "第" << fast + 1 << "次计算结果为:" << " slow=" << slow << ", fast=" << fast + 1 << endl;
cout << "计算后的数组为: ";
for (int i : nums)
cout << i << "\t";
cout << endl << endl<<endl;
}
return slow;
}
int main()
{
vector<int> nums{ 0,1,2,2,3,0,4,2 };
cout<<"删除val即2后新数组的长度为"<<removeElement(nums,2)<<endl;
return 0;
}
所以,LeetCode-27.移除元素的C++题解代码为:
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int slow=0;
int n=nums.size();
for(int fast=0;fast<n;++fast)
{
if(nums[fast]!=val)
{
nums[slow]=nums[fast];
++slow;
}
}
return slow;
}
};
参考文章:
https://leetcode-cn.com/problems/remove-element/solution/yi-chu-yuan-su-by-leetcode-solution-svxi/
https://leetcode-cn.com/problems/remove-element/solution/python-shuang-zhi-zhen-da-fa-hao-a-quan-guo-zui-ca/