題目鏈接
力扣(LeetCode)官網(wǎng) - 全球極客摯愛的技術(shù)成長(zhǎng)平臺(tái)
題目解析
將數(shù)組中出現(xiàn)的每個(gè)零復(fù)寫一遍,然后將其他元素向右平移,數(shù)組長(zhǎng)度不能改變。
法一:使用額外空間的做法
class Solution
{
public:
void duplicateZeros(vector<int>& arr)
{
// 定義一個(gè)額外的vector
vector<int> v;
// 遍歷數(shù)組
for(auto&e:arr)
{
// 如果該元素不為0,則向新數(shù)組中插入一個(gè)該元素
if(e) v.push_back(e);
// 如果該元素為0,則向新數(shù)組中插入兩個(gè)該元素
else
{
v.push_back(0);
v.push_back(0);
}
}
// 改變新數(shù)組的大小為老數(shù)組大小
v.resize(arr.size());
// 將老數(shù)組賦值給新數(shù)組
arr=v;
}
};
法二:原地修改的做法
?
?文章來源:http://www.zghlxwxcb.cn/news/detail-696079.html
class Solution
{
public:
void duplicateZeros(vector<int>& arr)
{
int n=arr.size();
int cur=0,dest=-1;
// 找最后一個(gè)復(fù)寫的元素
while(cur<n)
{
if(arr[cur]==0) dest+=2;
else dest++;
if(dest>=n-1) break;
cur++;
}
// 處理邊界情況
if(dest==n)
{
arr[n-1]=0;
cur--;
dest-=2;
}
// 覆蓋
while(cur>=0)
{
if(arr[cur]==0)
{
arr[dest--]=arr[cur];
arr[dest--]=arr[cur--];
}
else
{
arr[dest--]=arr[cur--];
}
}
}
};
?文章來源地址http://www.zghlxwxcb.cn/news/detail-696079.html
到了這里,關(guān)于LeetCode —— 復(fù)寫零(雙指針)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!