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

            
        }
        
    }






上一篇 下一篇

猜你喜欢

热点阅读