2020-5-6
- When all the clouds darken up the skyway, there’s a rainbow highway to be found.
當烏雲密佈,彩虹會爲你鋪就一條道路。
題目:
給定一個數組 nums,編寫一個函數將所有 0 移動到數組的末尾,同時保持非零元素的相對順序。
示例:
輸入: [0,1,0,3,12]
輸出: [1,3,12,0,0]
說明:
必須在原數組上操作,不能拷貝額外的數組。
儘量減少操作次數。
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/move-zeroes
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。
個人解答:(C版本)
- 將所有的非0數,把前面的的位置填完即可(比如使用一個變量k記錄,從0開始,遇到一個非0數,就將其填充在k的位置,然後k+1),最後把k及數組後面的數據全部置0,即可完成。
詳細看下面的代碼。
void moveZeroes(int* nums, int numsSize){
int NoneZeroPos = 0;
for(int i=0; i<numsSize; i++)
{
if(nums[i] != 0)
{
nums[NoneZeroPos++] = nums[i];
}
}
for(int i=NoneZeroPos; i<numsSize; i++)
{
nums[i] = 0;
}
}
- 複雜度分析
1)一次循環即可(雖然後面也有一個置0的循環),但是O(2n)=O(n),所以該算法的時間複雜度爲O(n)。
2)由於只使用了常量空間,空間複雜度爲O(1)。
- 運行結果: