LeetCode 1089. 复写零 Duplicate Zeros

【题目描述】
给你一个长度固定的整数数组 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 Zeros)