這是LeetCode中的一個(gè)題目,原題在這里。
問(wèn)題大意:
給一個(gè)數(shù)組nums和一個(gè)值val,刪除數(shù)組中的所有值為val的元素,并返回刪除后的數(shù)組新長(zhǎng)度。
解析:
- 兩個(gè)位置索引,分別是begin, i
- begin表示新數(shù)組末尾索引,初始化為0;i表示遍歷數(shù)組的索引變量,開(kāi)始為0
- 如果num[i] != val,則num[begin] = num[i],begin和i都加1
- 如果num[i] == val,則begin不變,i加1
時(shí)間復(fù)雜度為O(n),空間復(fù)雜度為O(1)
C++實(shí)現(xiàn)一
class Solution {
public:
int removeElement(vector<int>& nums, int val)
{
int begin = 0;
for(int i = 0; i < nums.size(); ++i)
{
if(nums[i] != val)
nums[begin++] = nums[i];
}
return begin;
}
};
c++實(shí)現(xiàn)二
這里可以使用STL中的remove簡(jiǎn)化代碼
class Solution {
public:
int removeElement(vector<int>& nums, int val)
{
nums.erase(remove(nums.begin(),nums.end(),val), nums.end());
return nums.size();
}
};
本作品采用知識(shí)共享署名-非商業(yè)性使用-禁止演繹 4.0 國(guó)際許可協(xié)議進(jìn)行許可。轉(zhuǎn)載請(qǐng)注明: 作者staneyffer,首發(fā)于我的博客,原文鏈接: https://chengfy.com/post/6