我成功地解决了Hackerrank上的一个问题,它通过了所有测试用例,但我得到了一个错误,时间限制超过。我猜如果我优化我的代码,它会起作用,但我想不出任何方法来使我的代码更有效率。
问题是:对大小为n的数组进行左旋操作会将数组的每个元素向左移动1个单位。例如,如果在数组[1,2,3,4,5]上执行两次左旋转,则该数组将变为[3,4,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是要执行的旋转次数
如果另一个向量不会导致空间问题,您可以复制它们,但要有一个偏移量:
//Not tested
vector<int> array_left_rotation(vector<int> a, int n, int k) {
std::vector<int> result(n);
for (int j = 0; j < k; j++){
result[j]=a[(j+k)%n];
}
return result;
}
不执行k旋转,而是尝试执行k旋转:一次将整个数组向左旋转k。那效率就高多了。
您不需要实际旋转数组来解决这个问题。公式(i k)%n
将为您提供数组中索引i
处的元素,该数组已向左旋转k
次。了解这一点,您可以通过以下方式访问每个元素一次来遍历数组:
int main() {
int* arr, n, k, i;
cin >> n >> k;
arr = new int[n];
for (i = 0; i < n; ++i)
cin >> arr[i];
for (i = 0; i < n; ++i)
cout << arr[(i + k) % n] << " ";
}
问题是-合并两个排序的链表。有关详细信息,请访问https://www.hackerrank.com/challenges/merge-two-sorted-linked-lists当我在网站上提交此内容时,它显示“因超时而终止”。请告诉我代码有什么问题,以及如何修复它。 }
在本节中,我们来了解一些着名的黑客以及它们如何成名。 乔纳森詹姆斯 乔纳森詹姆斯(Jonathan James)是美国黑客。他是第一个因在美国网络犯罪而入狱的少年。他于2008年5月18日自杀(枪伤)。 1999年,在16岁时,他通过破解NASA服务器的密码并窃取了国际空间站的源代码,包括控制生活空间内的温度和湿度,获得了几台计算机的访问权限。 凯文米特尼克 凯文米特尼克(Kevin Mitnic
我真的很困惑为什么我的Java代码不起作用,它给了黑客地球上的代码僧侣TLE。这里是指向1的链接 链接质疑第一个问题和尚和旋转 我不知道为什么它给了TLE我想这是一个无限循环。 现场的问题是- 蒙克和旋转蒙克喜欢对数组执行不同的操作,所以作为哈克地球学校的校长,他给他的新学生米什基布置了一个任务。Mishki将被提供一个大小为N的整数数组A和一个整数K,在这里她需要将数组向正确的方向旋转K步,然后
我使用命令生成器在Jenkins服务器上运行单元测试。phar exec“codecept运行单元应用程序/模型”-vvv并获取以下错误: [Symfony\Component\Process\Exception\ProcessTimedOutException] 进程“codecept运行单元应用程序/模型”超过了1800秒的超时时间。 我如何修复它并允许测试花费更多的时间?谢谢
问题内容: 如何限制/减少的超时时间?我正在抓取一个网站。对于出现在成千上万页中的表,我可以有一个元素说明没有信息,也可以有一个表。我搜索这些元素之一,而当缺少时,我搜索其他元素。问题在于,当其中一个不存在时,要花很长时间才能超时。这段时间可以缩短吗?可以为每个元素定义超时期限吗?我发现有关等待的所有内容都是为了延长超时时间…如果可以,我正在.NET环境中工作。 问题答案: 延迟是由“隐式等待”设
给定一个字符串,在不重复字符的情况下,找到最长子字符串的长度。例如,“abcabcbb”的不重复字母的最长子字符串是“abc”,其长度为3。对于“bbbbb”,最长的子字符串是“b”,长度为1。 对于长可重复字符串的最后一次测试,超过了时间限制。不知道如何优化。寻求改进,谢谢