当前位置: 首页 > 知识库问答 >
问题:

因超时终止:优化范围在哪里?

郑声
2023-03-14

我正在Hackerrank中解决一个问题,如下所示:

给定一个n整数的数组a和一个数字d,,对数组执行d左旋转。返回要打印为单行空格分隔的整数的更新数组。

这是我非常简单的解决方案:

#include<iostream>

using namespace std;

int main()
{
    int n,d;

    cin>>n>>d;

    int arr[n];

    for(int i = 0; i < n; i++)
    cin>> arr[i];

    for(int i = 0; i < d; i++)
    for(int j = 0; j < n - 1; j++)
    {
        arr[j] = arr[j] + arr[j + 1];
        arr[j + 1] = arr[j] - arr[j + 1];
        arr[j] = arr[j] - arr[j + 1];

    }

    for(int i = 0; i < n; i++)
    cout<<arr[i]<<" ";
}

但它仍然会抛出一个错误:

由于超时而终止:(

我可以在此脚本中进行哪些改进?任何建议都会非常有帮助。提前致谢。

共有1个答案

戚繁
2023-03-14

由于只有程序输出是有趣的,因此不需要在数组中执行实际旋转。

#include<iostream>

using namespace std;

int main()
{
    int n,d;

    cin>>n>>d;

    std::vector<int> arr(n);

    for(int i = 0; i < n; i++)
      cin>> arr[i];

    for(int i = d; i < n; i++)
      cout<<arr[i]<<" ";
    for(int i = 0; i < d; i++)
      cout<<arr[i]<<" ";
}

或者甚至更少的内存消耗

int main()
{
    int n,d;

    cin>>n>>d;

    std::vector<int> arr(d);

    for(int i = 0; i < d; i++)
      cin>> arr[i];

    for(int i = d; i < n; i++) {
      int n; cin >> n;
      cout<< n <<" ";
    }
    for(int i = 0; i < d; i++)
      cout<<arr[i]<<" ";
}
 类似资料:
  • 我正在尝试解决一个来自HackerRank的问题,当我提交我的解决方案时,我得到一个错误,说明“由于超时而终止”。 问题:对n个大小的数组的左旋转操作将数组的每个元素向左移动1个单位。例如,如果对数组[1,2,3,4,5]执行两次左旋转,那么该数组将变为[3,4,5,1,2]。 给定一个由n个整数和一个数字d组成的数组,对该数组执行d个左旋转。然后将更新后的数组打印为单行以空格分隔的整数。 输入格

  • 问题内容: 我正在使用SqlBulkCopy从xml备份还原表。其中一个表备份约为200MB,并且有很多记录。 我有错误: 问题答案: 您可能需要增加超时时间。尝试从默认值30秒增加该值。

  • 问题内容: 为什么使用lambda函数来获取值列表i = 4。在调用lambda期间,不存在封闭范围。函数f已经完成工作并返回了控制(变量i不存在)。 问题答案: Python使用闭包捕获对原始变量的引用。这些对象保留对名称的引用,可以通过该引用访问值。这意味着变量在完成后将继续存在。 您可以在lambda对象的元组中内省此闭包;函数具有相同的属性: 这也是列表中 所有 lambda 都引用val

  • 问题内容: 我想尽可能快地重复执行子过程。但是,有时该过程将花费很长时间,因此我想取消它。我使用signal.signal(…),如下所示: 但有时这段代码将尝试阻止下一轮执行。停止test / home / lu / workspace / 152 / treefit / test2超时/ bin / sh:/ home / lu / workspace / 153 / squib_driver

  • 我试图解决hackerrank的一个问题,当我提交我的解决方案时,我得到一个错误,说明“由于超时而终止”。 请检查代码,并建议我如何优化。 语句:您有一个空序列,将向您提供查询。每个查询都是以下三种类型之一: 1 x-将元素x推入堆栈。2-删除堆栈顶部的元素。3-打印堆栈中的最大元素。 输入格式 输入的第一行包含一个整数。接下来的每一行都包含上述查询。(保证每个查询都是有效的。) 输出格式 对于每

  • 问题内容: 我有以下代码: 我的索引超出范围错误,我不知道为什么。我声明了大小为10的尺寸。为什么会出现此错误? 问题答案: 您声明了一个,其初始容量为10个元素,但没有向此列表中添加元素,即列表为空。将替换现有元素,但是由于列表中没有元素,因此将引发异常。您必须使用方法在之前添加元素。 表示列表内部维护的数组的开头大小为10。在列表中添加更多元素时,此内部数组的大小可能会更改。