LeetCode 283. 移动零 Move Zeroes

【题目描述】
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。

【示例】

输入: [0,1,0,3,12]
输出: [1,3,12,0,0]

【说明】

1、必须在原数组上操作,不能拷贝额外的数组。
2、尽量减少操作次数。

【思路1】
1、把不为0的数字往前移,标记0的个数k,在后边添加k个0;
2、时间复杂度O(n)
3、空间复杂度O(1)

Swift代码实现

func moveZeroes(_ nums: inout [Int]) {
    var k = 0
    for i in 0..<nums.count {//先把不为0的数字提到前边
        if nums[i] != 0 {
            nums[k] = nums[i]
            k+=1
        }
    }
    for j in k..<nums.count {//后边补0
        nums[j] = 0
    }
}

【思路2】
1、使用一个指针变量来标记第一个0的index,遇到不为0的数字和0交换,直到交换完毕
2、时间复杂度O(n)
3、空间复杂度O(1)
4、很巧妙的!!!

Swift代码实现:

func moveZeroes(_ nums: inout [Int]) {
    var k = 0//永远标识第一个0的位置,当非0位置 和 0位置交换后,k++
    for i in 0..<nums.count {
        if nums[i] != 0 {
            if i != k {
                let tmp = nums[i]
                nums[i] = nums[k]
                nums[k] = tmp
            }
            k+=1
        }
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 9,176评论 0 2
  • 一些概念 数据结构就是研究数据的逻辑结构和物理结构以及它们之间相互关系,并对这种结构定义相应的运算,而且确保经过这...
    Winterfell_Z阅读 11,484评论 0 13
  • 一、基本数据类型 注释 单行注释:// 区域注释:/* */ 文档注释:/** */ 数值 对于byte类型而言...
    龙猫小爷阅读 9,789评论 0 16
  • 苏阳活了29年,正经的恋爱就谈过一次。算不上干柴烈火,但是初恋女友忽冷忽热的态度算是让苏阳涨了教训了。分手之后苏阳...
    半斗将军阅读 1,805评论 0 1
  • 今天正事儿没干,全招呼三只奶猫了。不过还好已经可以控制做事的节奏,不像昨天一样手忙脚乱。早上六点仨猫就开始奶声奶气...
    舒斗斗阅读 4,314评论 1 1

友情链接更多精彩内容