《LeetCode刷题笔记》 Day3——删除元素
给你一个数组 nums和一个值 val,你需要 原地 移除所有数值等于val的元素,并返回移除后数组的新长度。
这种问题是要用双指针方法的。
首先在前面定义一个快指针,然后在后面定义一个慢指针。如果快指针没有扫过Val元素,则前进一个空格,慢指针的值等于快指针和慢指针;
如果快速指针扫过Val元素,则慢速指针不会移动。但是后来,慢指针的值等于快指针的值,只少了一步。
例如
for(slowendex=0;fastIndex nums.lengthfast index){ 0
if (nums[fastIndex]!=val){ 0
nums[slowendex]=nums[FastIndex];
slowIndex
}
}
这里,每当快指针的扫描值不等于Val时,大家都会一起增加;
一旦Val值被扫描,快速指针继续向前移动,而慢速指针不移动,并且没有nums[slowendex]=nums[快速索引]和慢速索引。
但是,循环继续后,nums { slowendex }仍将等于nums[fastIndex]。不同的是slowIndex短了一步,这就是为什么慢指针和快指针是分开的。
最后一个输出慢速指针是删除的数组。
整体代码:
//时间复杂度:O(n)
//空间复杂度:O(1)
解决方案类{
公众号:
int removeElement(矢量nums,int val){ 0
int slowwindex=0;
for(int FastIndex=0;fast index nums . size();fast index){ 0
如果(瓦尔!=nums[fastIndex]) {
nums[slowendex]=nums[FastIndex];
}
}
返回slowIndex
}
};
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/149510.html