我使用的是hacker rank,我不明白为什么我的ruby代码只适用于20个测试用例中的一个。问题是:
John沃森知道一种称为对整数数组进行右循环旋转的操作。一个旋转操作将最后一个数组元素移动到第一个位置,并将所有剩余元素右移一位。为了测试夏洛克的能力,沃森向夏洛克提供了一个整数数组。Sherlock将执行旋转操作多次,然后确定给定位置处元素的值。
对于每个数组,执行若干次右循环旋转并返回给定索引处元素的值。
功能描述
在下面的编辑器中完成circularArrayRotation函数。
circularArrayRotation具有以下参数:
int a[n]
:要旋转的数组int k
:旋转计数int queries[1]
:要报告的索引
退货int[q]
:m
中请求的旋转a
中的值
输入格式
第一行包含3个空格分隔的整数,n
,k
和q
,整数数组中的元素数,循环计数和查询次数。第二行包含n
空格分隔的整数,其中每个整数i
描述数组元素a[i]
(其中0 <= i < n
)。q
后续的每一行都包含一个整数queries[i]
,这是a
中要返回的元素的索引。
制约因素
样本输入0
3 2 3
1 2 3
0
1
2
字符串
样本输出0
2
3
1
型
下面是我的代码:
def circularArrayRotation(a, k, queries)
q = []
while k >= 1
m = a.pop()
a.unshift m
k = k - 1
end
for i in queries do
v = a[queries[i]]
q.push v
end
return q
end
型
它只适用于示例文本的情况下,但我不知道为什么。谢谢你能提供的任何帮助。
2条答案
按热度按时间q5iwbnjs1#
还没有运行任何基准测试,但这似乎是一个名为
Array.rotate()
的方法的工作:字符串
也处理负旋转值和
nil
结果:型
brjng4g32#
我在你的代码中没有看到任何错误,但我想建议一种更有效的计算方法。
首先观察到,在
q
旋转之后,索引为i
的元素将处于索引(i+q) % n
。例如,假设
字符串
然后在
q
旋转之后,数组将如下所示。型
因此我们可以写
的字符串
或者,我们可以观察到,在
q
旋转之后,索引j
处的元素最初是索引(j-q) % n
。对于前面的示例,在
q
旋转之后,数组将为型
因此我们可以写成
型