铁哥们网站建设,邢台最新通知今天,wordpress实现pdf浏览,太原网站建设制作给你一个数组 nums 和一个值 val#xff0c;你需要 原地 移除所有数值等于 val 的元素#xff0c;并返回移除后数组的新长度。
不要使用额外的数组空间#xff0c;你必须仅使用 O(1) 额外空间并 原地 修改输入数组。
元素的顺序可以改变。你不需要考虑数组中超出新长度后面…给你一个数组 nums 和一个值 val你需要 原地 移除所有数值等于 val 的元素并返回移除后数组的新长度。
不要使用额外的数组空间你必须仅使用 O(1) 额外空间并 原地 修改输入数组。
元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
示例 1
输入nums [3,2,2,3], val 3 输出2, nums [2,2] 解释函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。你不需要考虑数组中超出新长度后面的元素。例如函数返回的新长度为 2 而 nums [2,2,3,3] 或 nums [2,2,0,0]也会被视作正确答案。 示例 2
输入nums [0,1,2,2,3,0,4,2], val 2 输出5, nums [0,1,4,0,3] 解释函数应该返回新的长度 5, 并且 nums 中的前五个元素为 0, 1, 3, 0, 4。注意这五个元素可为任意顺序。你不需要考虑数组中超出新长度后面的元素。
题解双指针法快慢指针法 通过一个快指针和慢指针在一个for循环下完成两个for循环的工作。
定义快慢指针
快指针i寻找新数组的元素 新数组就是不含有目标元素的数组 慢指针j指向更新 新数组下标的位置
#include iostream
#include string
#include vector
using namespace std;
// Input: nums [0,1,2,2,3,0,4,2], val 2
// Output: 5, nums [0,1,4,0,3,_,_,_]
class Solution {
public:int removeElement(vectorint nums, int val) {int len nums.size();int j 0;for (int i 0; i len; i) {if (nums[i] ! val) {nums[j] nums[i];j j 1;}}return j;}
};
int main() {// vectorint nums {0,1,2,2,3,0,4,2};vectorint nums {2, 2};Solution sl;int res sl.removeElement(nums, 2);cout res endl; return 0;
}