目錄
283. 移動零
描述
?解析
代碼
1089. 復(fù)寫零
描述
解析
代碼
283. 移動零
283. 移動零https://leetcode.cn/problems/move-zeroes/
描述
給定一個數(shù)組?
nums
,編寫一個函數(shù)將所有?0
?移動到數(shù)組的末尾,同時保持非零元素的相對順序。請注意?,必須在不復(fù)制數(shù)組的情況下原地對數(shù)組進(jìn)行操作。
示例 1:
輸入:nums=[0,1,0,3,12]
輸出:[1,3,12,0,0]
示例 2:
輸入:nums=[0]
輸出:[0]
?解析
利用雙指針?biāo)枷?,前指針cur遍歷數(shù)組,判斷nums[cur],找出非0的數(shù),再與后指針dest下標(biāo)所在的數(shù)nums[dest]交換,將數(shù)組劃分為三塊區(qū)域非0區(qū)、0區(qū)、帶處理區(qū),直到cur處理完數(shù)組的最后一個數(shù)字。
代碼
class Solution {
public:
void moveZeroes(vector<int>& nums) {
for(int cur=0,dest=-1;cur<nums.size();cur++)
if(nums[cur])
swap(nums[cur],nums[++dest]);
}
};
1089. 復(fù)寫零
1089. 復(fù)寫零https://leetcode.cn/problems/duplicate-zeros/
描述
給你一個長度固定的整數(shù)數(shù)組?
arr
?,請你將該數(shù)組中出現(xiàn)的每個零都復(fù)寫一遍,并將其余的元素向右平移。注意:請不要在超過該數(shù)組長度的位置寫入元素。請對輸入的數(shù)組?就地?進(jìn)行上述修改,不要從函數(shù)返回任何東西。
示例 1:
輸入:arr = [1,0,2,3,0,4,5,0] 輸出:[1,0,0,2,3,0,0,4] 解釋:調(diào)用函數(shù)后,輸入的數(shù)組將被修改為:[1,0,0,2,3,0,0,4]
示例 2:
輸入:arr = [1,2,3] 輸出:[1,2,3] 解釋:調(diào)用函數(shù)后,輸入的數(shù)組將被修改為:[1,2,3]
解析
1.先找到最后一個“復(fù)寫”的數(shù)
雙指針?biāo)惴ǎ?.先判斷cur位置的值。2.決定dest向后移動異步或者兩步。3.判斷一下是否已經(jīng)結(jié)束為止。4.cur++
2.處理一下邊界情況
3.“從后往前”完成復(fù)寫操作
文章來源:http://www.zghlxwxcb.cn/news/detail-753175.html
代碼
class Solution {
public:
void duplicateZeros(vector<int>& arr) {
int cur=0,dest=-1;int n=arr.size();
//找到復(fù)寫后數(shù)組最后一個數(shù)下標(biāo)
while(cur<n)
{
if(arr[cur]==0) dest+=2;
else dest++;
if(dest>=n-1) break;
else cur++;
}
//處理邊界情況
if(dest==n)
{
arr[n-1]=0;
cur--;
dest-=2;
}
//從后往前復(fù)寫
while(cur>=0)
{
if(arr[cur]==0) {arr[dest--]=0;arr[dest--]=0;}
else arr[dest--]=arr[cur];
cur--;
}
}
};
文章來源地址http://www.zghlxwxcb.cn/news/detail-753175.html
到了這里,關(guān)于[LeetCode]-283. 移動零-1089. 復(fù)寫零的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!