LeetCode 1089. 复写零 Duplicate Zer

作者: 1江春水 | 来源:发表于2019-08-09 10:36 被阅读3次

    【题目描述】
    给你一个长度固定的整数数组 arr,请你将该数组中出现的每个零都复写一遍,并将其余的元素向右平移。
    注意:请不要在超过该数组长度的位置写入元素。
    要求:请对输入的数组 就地 进行上述修改,不要从函数返回任何东西。

    【示例1】

    输入:[1,0,2,3,0,4,5,0]
    输出:null
    解释:调用函数后,输入的数组将被修改为:[1,0,0,2,3,0,0,4]
    

    【示例2】

    输入:[1,2,3]
    输出:null
    解释:调用函数后,输入的数组将被修改为:[1,2,3]
    

    【提示】

    1、1 <= arr.length <= 10000
    2、0 <= arr[i] <= 9
    

    【思路1】
    1、循环遍历数组,找到0的位置index
    2、数组从后向前遍历,依次向后移位,直到index+1的位置
    3、赋值arr[index+1] = 0
    4、外层遍历的i++,因为插入了一个0
    5、时间复杂度O(n^2)
    6、空间复杂度O(1)

    Swift代码实现:

    func duplicateZeros(_ arr: inout [Int]) {
        var i = 0
        while i < arr.count {
            if arr[i] == 0 {
                var tmp = arr.count-1
                while tmp-i > 1 {
                    arr[tmp] = arr[tmp-1]
                    tmp-=1
                }
                arr[tmp] = 0
                i+=1
            }
            i+=1
        }
    }
    

    【思路2】这个咋没想到呢 😔
    1、只需一次遍历
    2、找到0的index,直接index+1 赋值0
    3、遍历数i++
    4、去掉数组最后一位
    5、时间复杂度O(n)
    6、空间复杂度O(1)

    Swift代码实现:

    func duplicateZeros(_ arr: inout [Int]) {
        var i = 0
        while i < arr.count {
            if arr[i] == 0 {
                arr.insert(0, at: i+1)
                arr.removeLast()
                i+=1
            }
            i+=1
        }
    }
    

    相关文章

      网友评论

        本文标题:LeetCode 1089. 复写零 Duplicate Zer

        本文链接:https://www.haomeiwen.com/subject/dajcjctx.html