寫在前面
- 最近加班兒較多,腦袋轉的着實慢很多,,,
- 方式新穎、出奇,值得筆記
題目詳情
給你一個數組 nums 和一個值 val,你需要 原地 移除所有數值等於 val 的元素,並返回移除後數組的新長度。
不要使用額外的數組空間,你必須僅使用 O(1) 額外空間並 原地 修改輸入數組。
元素的順序可以改變。你不需要考慮數組中超出新長度後面的元素(此處敲黑板)。
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int cnt = 0;
int siz = nums.size();
for(int i=0; i<siz; i++) {
if(nums[i]!=val){
nums[cnt++] = nums[i];
}
}
return cnt;
}
};
erase
刪除函數
erase
刪除元素後,數組長度變化,按照原長度訪問數組將導致越界問題
class Solution
{
public:
int removeElement(vector<int>& nums, int val)
{
int cnt=0;
int nsize = nums.size();
for(int j=0; j<nsize; j++)
{
if(nums[j]!=val)
cnt++;
}
int k=0;
if(cnt==0) return 0;
vector<int>::iterator it;
for(int i=0; i<nsize; i++)
{
if(nums[k]==val && k<cnt)
{
it=nums.begin()+k;
nums.erase(it);
continue;
}
else if(k<cnt)
k++;
}
return cnt;
}
};