代码之家  ›  专栏  ›  技术社区  ›  Tolga Kağan

我正在研究算法,它只在1种情况下给出一个错误(运行时错误)

  •  0
  • Tolga Kağan  · 技术社区  · 2 年前

    只有案例4给出了运行时错误。我查看了其他答案,但找不到解决方案

    Question

    我不返回数组。我只是在添加元素

    func circularArrayRotation(a: [Int], k: Int, queries: [Int]) -> [Int] {
        var result = [Int]()
        
        for i in queries {
            if i < k {
                result.append(a[a.count-k+i])
            }
            else {
                result.append(a[i-k])
            }
        }
        return result
    }
    

    这个算法的时间复杂度不是O(n)。我算错了吗?

    case ss

    1 回复  |  直到 2 年前
        1
  •  2
  •   Abhinav Mathur    2 年前

    k 可以远远大于数组的长度,因此您的方法失败了,因为索引远远大于数组长度。

    要正确处理此问题,请 k 等于 k modulus array_length ,因为将阵列旋转 array_length times有效地不会更改当前的顺序。