27. 移除元素
我的思路:
很绕,且有漏洞
使用t
记录第一个需要覆盖的元素的位置,cnt
表示待覆盖的元素的数量,但是在[4,5] val=4
中,当i
遍历到5时,cnt
仍然等于1,于是t
又变成了i
的值,指向1,于是出错。
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int len = nums.size();
sort(nums.begin(), nums.end());
int cnt = 0, t = -1;
for (int i = 0; i < len; ++i) {
if (nums[i] == val) ++cnt;
if (cnt == 1) {
t = i;
}
if (nums[i] != val && t >= 0) {
nums[t] = nums[i];
++t;
}
}
return len - cnt;
}
};
正常可以直接使用cnt
作为待覆盖的元素的下标,将所有不等于val
的元素覆盖到cnt
的位置。
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int len = nums.size();
int t = 0;
for (int i = 0; i < len; ++i) {
if (nums[i] != val) {
nums[t] = nums[i];
++t;
}
}
return t;
}
};