(6)Go单索引解决移动0问题
2019-05-14 本文已影响0人
哥斯拉啊啊啊哦
算法:用单索引解决,定一个索引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,通过。