283. 移动零
2022-07-21 本文已影响0人
邦_
本来想着边删除边移动。。发现删除操作也是消耗性能的= =。。似乎交换的写法比较好
func moveZeroes(_ nums: inout [Int]) {
let len = nums.count
if len == 1 {
return
}
var count = 0
nums.removeAll { num in
if num == 0 {
count += 1
return true
}
return false
}
if count > 0 {
for _ in 0..<count {
nums.append(0)
}
}
}
用cur 记录为0的位置 遇到不是0的 把值赋值给cur的位置 不是0的位置赋值为0 cur赋值不是0的索引
思路比较难懂= =。。
func moveZeroes(_ nums: inout [Int]) {
let len = nums.count
if len == 1 {
return
}
//cur 用来标记0的位置
var cur = 0
for i in 0..<len {
if nums[i] == 0 {
continue
}
if cur != i{
nums[cur] = nums[i]
nums[i] = 0
}
cur += 1
}
}