算法:用單索引解決,定一個索引nonZero,在[0...nonZero]的元素均不為0,
[nonZero+1...length-1]的元素均為0
// 時間復雜度O(n)
// 空間復雜度O(1)
func moveZeroes(nums []int) {
length := len(nums)
nonZero := 0 // [0...nonZero)的元素均為非0元素
for i := 0; i < length; i++ {
if nums[i] != 0 {
nums[nonZero] = nums[i]
nonZero++
}
}
for i := nonZero; i < length; i++ {
nums[i] = 0
}
}
// 方法2,代碼更簡潔,不過交換次數較多,時間效率不如第一種
func moveZeroes2(nums []int) {
length := len(nums)
nonZero := 0 // [0...nonZero)的元素均為非0元素
for i := 0; i < length; i++ {
if nums[i] != 0 {
nums[nonZero], nums[i] = nums[i], nums[nonZero]
nonZero++
}
}
}
提交leetcode,通過。