gpt4 book ai didi

ios - HackerRink 解决方案的重构代码 (Swift)

转载 作者:可可西里 更新时间:2023-11-01 00:57:41 26 4
gpt4 key购买 nike

我正在尝试解决一个非常简单的 HackerRank 测试,我有一些我认为非常干净和重构的代码......但它总是在最后一个测试用例中超时。我为它下载了输入,它是一个非常大的值字符串,但其他人使用更复杂的代码也能顺利通过。如果有的话,我需要一些帮助来找到一种更简洁的方式来表示我的解决方案。

这就是问题所在:https://www.hackerrank.com/challenges/ctci-array-left-rotation

对大小为 size 的数组进行左旋转操作会将数组的每个元素向左移动一个单位。例如,如果对数组 执行左旋转,则数组将变为 。

给定一个整数数组和一个数字 ,对数组执行左旋转。然后将更新后的数组打印为一行空格分隔的整数。

输入格式

第一行包含两个以空格分隔的整数,分别表示(整数的数量)和(必须执行的向左旋转的数量)的值。第二行包含以空格分隔的整数,描述数组初始状态的各个元素。

示例输入

5 41 2 3 4 5

示例输出

5 1 2 3 4

这是我的解决方案:

import Foundation

func shift(_ a: [String], n: Int, d: Int) -> String {
var s = a
for _ in 0 ..< d {
let v = s.remove(at: 0)
s.insert(v, at: n-1)
}
return s.joined(separator: " ")
}

let values = readLine()!.components(separatedBy: " ").map { Int($0)! }
let line2 = readLine()!.components(separatedBy: " ")
print(shift(line2, n: values[0], d: values[1]))

谁能帮我找到一个更简洁的方法来解决这个问题?我的解决方案总是在最后两个测试用例之一上超时。

提前致谢。

最佳答案

取而代之的是根据所使用的数据结构移除/插入应该采用 O(n) 的元素,而是在数组上进行交换。

func shift(_ a: [String], n: Int, d: Int) -> String {
var s = a
for i in 0 ..< d {
var t = s[0]
s[0] = a[(i - d)%n]
a[(i - d)%n] = t
}
return s.joined(separator: " ")
}

我没有运行这个所以一定要确保代码是正确的,但想法是存在的。

关于ios - HackerRink 解决方案的重构代码 (Swift),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41706621/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com