更好地处理数组的循环旋转

时间:2018-03-26 18:00:05

标签: arrays swift algorithm rotation

使用swift,我正在解决以下问题...

“给出了由N个整数组成的零索引数组A.数组的旋转意味着每个元素向右移动一个索引,并且数组的最后一个元素移动到第一个位置。例如,数组A = [3,8,9,7,6]的旋转是[6,3,8,9,7](元素向右移动一个索引,6移动到第一个位置)。目标是旋转数组AK次;也就是说,A的每个元素将向右移动K次。“

我正在使用两种稍微不同的方法来解决上述问题,并且有点混淆哪一种更好的性能和复杂性(不需要考虑代码行数)..

#Solution1:

import UIKit

public func solution(_ A : inout [Int], _ K : Int) -> [Int] {

    if (K < 0 || K > 100 || A.count == 0) {
        return [];
    }

    if (A.count == 1) {
        return A;
    }

    for _ in 0...(K - 1) {
        let lastIndex = A.removeLast()
        A.insert(lastIndex, at: 0)
    }


    return A
}
var tem = [1,2,3,4,5]
solution(&tem, 2)
print(tem)

#Solution2:

public func solution2(_ A : inout [Int], _ K : Int) -> [Int] {
    var ret: [Int] = [];

    if (K < 0 || K > 100 || A.count == 0) {
        return ret;
    }

    if (A.count == 1) {
        return A;
    }

    ret = A
    for i in 0...(K - 1) {
        ret[(i + K) % A.count] = A[i];
    }

    return ret
}
var tem2 = [1,2,3,4,5]
solution2(&tem2, 2)
print(tem)

请帮我确定上述两种解决方案中哪一种更好,性能更好以及为什么......提前致谢。

0 个答案:

没有答案