【发布时间】:2020-05-23 07:46:21
【问题描述】:
在问题中,我必须将数组中的数据逆时针旋转 d 个数字。但是运行所需的时间比提交资格所需的时间要长。谁能帮助我优化代码以在更短的时间内运行它?谢谢!
代码如下:
int main() {
int test_cases,size,d;
std::cin>>test_cases;
while(test_cases!=0){
std::cin>>size>>d;
int ar[size];
for(int i=0;i<size;i++){
std::cin>>ar[i];
}
while(d!=0){
int x = ar[0];
for(int i=1;i<size;i++){
ar[i-1]=ar[i];
}
ar[size-1]=x;
d--;
}
for(int i=0;i<size;i++){
std::cout<<ar[i]<<" ";
}
test_cases--;
cout<<endl;
}}
【问题讨论】:
-
int arr[size];声明了一个变长数组,这是一个非标准特性,你最好使用std::vector。搜索一次不旋转一步的算法。或者只是作弊并使用std::rotate。 -
要将阵列向左“旋转”10 个位置,您将整个阵列向左旋转 1 个位置 10 次。您可以一次旋转整个数组。
-
您的算法每次测试 O(size * d),但可以减少到每次测试 O(d)。参见例如Geeks for geeks explanation。使用额外的数组相对容易,而没有额外的数组则稍微复杂一些。
-
@Bob__ 我不会打电话使用 std::rotate 作弊:)
标签: c++ arrays data-structures compile-time