题目跳转链接
题目大意:
注意框住部分,题目允许我们改变数组的顺序。
基本思路:用两个下标分别表示在此之前的数字没有值为val的,另一个是从后往前的不是val值的下标。
代码:
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int lf,rg,sz=nums.size();
lf=0,rg=sz-1;
while(lf<=rg){
if(nums[rg]==val){
rg--;
continue;
}
if(nums[lf]==val){
nums[lf]=nums[rg];
rg--,lf++;
}
else{
lf++;
}
}
return lf;
}
};
如果题目不允许我们调换数组的顺序,即没有我框出来的那句话怎么解决这个问题。
基本思路一致,只是两个类似指针的下标都是从左往右开始的。
代码:
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[left] = nums[right];
left++;
}
}
return left;
}
};
还是不懂怎么做的小伙伴可以直接看力扣的官方题解。
官方题解跳转链接