赞
踩
在最坏情况下(输入数组中没有元素等于val),左右指针各遍历了数组一次。但不会改变相对位置。
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int n = nums.size();
int left = 0;
for (int right = 0; right < n; right++) {
if (nums[right] != val) {
//把右边快指针的值复制到左边慢指针的位置,nums[right]==val就continue
nums[left++] = nums[right];
}
}
return left;
}
};
在最坏的情况下合起来只遍历了数组一次。减少了复制次数。但是改变了相对位置。
class Solution { public: int removeElement(vector<int>& nums, int val) { int left=0, right=nums.size()-1; while(left <= right){ if(nums[left] == val){ //用右指针的元素覆盖掉左指针的元素,右指针向中间移动 nums[left] = nums[right]; right--; } else{ //左指针向中间移动 left++; } } return left; } };
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。