我成功地解决了Hackerrank上的一个问题,它通过了所有的测试用例,但是我得到了一个超出时间限制的错误。我猜如果我优化我的代码,它会工作,但我想不出任何方法使我的代码更有效率。超过Hackerrank的时间限制
现在的问题是: 大小为n的数组的左旋转操作会将阵列的每个元素向左移动1个单位。例如,如果在数组[1,2,3,4,5]上执行2次左旋转,则数组将变为[3,4,5,1,2]。
给定一个n个整数和一个数字d的数组,在数组上执行d左旋。然后将更新后的数组作为一行空格分隔的整数。
任何人都可以请指导我如何使此代码更有效?
我的代码是:
vector<int> array_left_rotation(vector<int> a, int n, int k) {
for (int j = 0; j < k; j++){
a[n] = a[0];
for (int i = 0; i < n; i++){
a[i] = a[i+1];
}
a[n-1] = a[n];
}
return a;
}
n是在阵列 k个元素的数量将要执行
使用[ ? – NathanOliver
请在此处不要询问关于在线代码判断引擎的问题。任何人都不可能告诉你自己的测试用例失败,因为这些通常都没有披露。即使您测试的是在您的本地环境中运行,您可能错过了测试在线挑战中应用的一些边缘案例。有创意并尝试找到它们。此外,长期来看,这些问题可能没有任何价值,除了欺骗在线竞赛之外,没有任何东西可以学到。 –
那么你怎么打印数组从'd'到'n',然后从'0'到'd',所以你实际上不需要旋转任何东西? – nwp