gpt4 book ai didi

c++ - 顺时针旋转 2D 矩阵时简化代码以避免 TLE

转载 作者:行者123 更新时间:2023-11-27 23:36:23 26 4
gpt4 key购买 nike

我有顺时针旋转 2D 矩阵的工作代码,但当 k 达到大数时,我遇到了 TLE(超出时间限制)问题。我不知道如何简化我的代码,我猜是 for 循环导致了问题,但我看不出没有它们就可以使我的代码工作的方法。有没有其他方法可以简化我的代码以避免 TLE?

#include <iostream>
#include <fstream>
using namespace std;
void funk(int a[][101], int n,int k);

int main()
{
int a[101][101],n,k;
ifstream ived;
ived.open("15.txt");
ived>>n>>k;
for (int i=0; i<n; i++) {
for (int j=0; j<n; j++) {
ived>>a[i][j];
}
}
ived.close();
funk(a, n, k);
ofstream isved;
isved.open("15rez.txt");
for (int i=0;i<n; i++) {
for (int j=0; j<n; j++) {
isved<<a[i][j]<<" ";
}
isved<<endl;
}
isved.close();
return 0;
}


void funk(int a[][101], int n, int k) {

for (int pak=0; pak<k; pak++) {
for (int i=0; i<n/2; i++) {
for (int j=i; j<n-i-1; j++) {
int prad=a[i][j];
a[i][j] = a[n-1-j][i];
a[n-1-j][i] = a[n-1-i][n-1-j];
a[n-1-i][n-1-j] = a[j][n-1-i];
a[j][n-1-i]=prad;
}
}
}
}

最佳答案

如果 k 是矩阵应该旋转的次数,那么您可以利用这个事实,即在 4 次旋转后它会转换为自身。因此,如果将 k 替换为 k % 4,结果将是相同的,从而将 O(k) 算法替换为 O (1)一个。

关于c++ - 顺时针旋转 2D 矩阵时简化代码以避免 TLE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58922905/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com