題目:移動(dòng)零
描述:
給定一個(gè)數(shù)組 nums, 編寫一個(gè)函數(shù)將所有 0 移動(dòng)到它的末尾重绷,同時(shí)保持非零元素的相對(duì)順序。
例如膜毁, 定義 nums = [0, 1, 0, 3, 12]昭卓,調(diào)用函數(shù)之后, nums 應(yīng)為 [1, 3, 12, 0, 0]瘟滨。
注意事項(xiàng):
必須在原數(shù)組上操作候醒,不要為一個(gè)新數(shù)組分配額外空間。
盡量減少操作總數(shù)杂瘸。
思路:增加標(biāo)志位(j)記錄從頭開始的非零元素后面的位置倒淫,循環(huán)數(shù)組,當(dāng)元素非零時(shí)败玉,交換nums[i]和nums[j]敌土,即將找到的非零元素移動(dòng)到當(dāng)前非零元素串后面镜硕。
代碼如下:
class Solution {
func moveZeroes(_ nums: inout [Int]) {
let count = nums.count
var j = 0
for i in 0..<count {
if nums[i] != 0 {
nums.swapAt(i, j)
j += 1
}
}
}
}
//這里交換用的是Swift提供的 swapAt(i: Int, j: Int) 函數(shù)
//當(dāng)然交換可以自己寫,我是真的有點(diǎn)懶