題目:
給你一個數(shù)組 nums 和一個值 val,你需要 原地 移除所有數(shù)值等于 val 的元素,并返回移除后數(shù)組的新長度。
不要使用額外的數(shù)組空間,你必須僅使用 O(1) 額外空間并 原地 修改輸入數(shù)組。
元素的順序可以改變。你不需要考慮數(shù)組中超出新長度后面的
樣例:示例 1:
輸入:nums = [3,2,2,3], val = 3
輸出:2, nums = [2,2]
解釋:函數(shù)應(yīng)該返回新的長度 2, 并且 nums 中的前兩個元素均為 2。你不需要考慮數(shù)組中超出新長度后面的元素。例如,函數(shù)返回的新長度為 2 ,而 nums = [2,2,3,3] 或 nums = [2,2,0,0],也會被視作正確答案。文章來源:http://www.zghlxwxcb.cn/news/detail-632575.html
思路
使用變量k記錄等于val的個數(shù),將后面的i元素向前移,移動k個位置,也就是i-k的位置文章來源地址http://www.zghlxwxcb.cn/news/detail-632575.html
代碼實(shí)現(xiàn)
class Solution {
public:
int removremoveElementeElement(vector<int>& nums, int val) {
int k=0;//用來記錄等于val的數(shù)組中的元素的個數(shù)
int i=0;//遍歷
while(i<=nums.size()-1){
if(numsnums[i]!=valval){//當(dāng)元素不是val的值時執(zhí)行
nums[i-k]=nums[i];//向前移動數(shù)據(jù),補(bǔ)空數(shù)據(jù)同時使得位序指向下一個元素。
i++;
}else{
//如果恰好遍歷到該值,就記錄一次k,并且使得i++指向下一個元素。
k++;
i++;
}
}
return nums.size()-k;//總長度減去去除重復(fù)元素后的
}
};
到了這里,關(guān)于【代碼隨想錄-Leetcode第二題:27.移除元素】的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!