- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在尝试解决一个非常简单的 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/
我正在尝试解决一个非常简单的 HackerRank 测试,我有一些我认为非常干净和重构的代码......但它总是在最后一个测试用例中超时。我为它下载了输入,它是一个非常大的值字符串,但其他人使用更复杂
我是一名优秀的程序员,十分优秀!