福田做網(wǎng)站的公司sem全稱
千萬不要被這道題標(biāo)注著“簡單”迷惑了,實際上需要注意的細(xì)節(jié)很多。
題目描述:
解題思路:
正序遍歷,確定結(jié)果數(shù)組的最后一個元素所在的位置;知道最后一個元素的位置后倒序進(jìn)行填充。
- 先找到最后一個需要復(fù)寫的數(shù)
- 先判斷cur位置的值
- 決定dest向后移動一步還是兩步
- 判斷dest是否已經(jīng)到結(jié)束位置
- cur++
- 處理邊界情況(dest超過arr.size()-1的情況)?
- 從后向前完成復(fù)寫的操作
代碼:
class Solution {
public:void duplicateZeros(vector<int>& arr) {int cur = 0;int dest = -1;while(cur < arr.size()){if(arr[cur] == 0){dest += 2;}else{dest++;}if(dest >= arr.size() - 1){break;}cur++;}if(dest > arr.size() - 1){arr[arr.size() - 1] = 0;cur--;dest -= 2;}while(cur >= 0){if(arr[cur] != 0){arr[dest] = arr[cur];dest--;cur--;}else{arr[dest] = 0;arr[dest - 1] = 0;cur--;dest -= 2;}}}
};