社区讨论

关于时间复杂度

学术版参与者 6已保存回复 6

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
6 条
当前快照
1 份
快照标识符
@m4ytw33k
此快照首次捕获于
2024/12/22 07:46
去年
此快照最后确认于
2025/11/04 12:30
4 个月前
查看原帖
CPP
#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
#define maxn 2000010
#define mod 10000000007
#define pair pair<int, int>
#define make make_pair
int n;
int a[5010];

inline long long read() {
    long long x = 0, f = 1;
    char ch = getchar();
    while (ch < '0' || ch > '9') {
        if (ch == '-')
            f = -1;
        ch = getchar();
    }
    while (ch >= '0' && ch <= '9')
        x = x * 10 + ch - '0', ch = getchar();
    return x * f;
}

void write(long long x) {
    if (x < 0)
        putchar('-'), x = -x;
    if (x > 9)
        write(x / 10);
    putchar(x % 10 + '0');
    return;
}

int main() {
    cin >> n;
    for (int i = 1; i <= n; i++) {
        cin >> a[i];
    }
    int ans = -1;
    for (int i = 1; i <= n; i++) {
        for (int d = 1; d <= n - i; d++) {
            int len = 1;//最大长度
            for (int j = i; j <= n - d; j += d) {
                if (a[j] != a[j + d]) break;//不满足就取消遍历。
                else len++;
            }
            ans = max(ans, len);
        }
    }
    cout << max(1, ans);//为了防止 n = 1 的情况,因为这样子 ans = -1
    return 0;
}
请问代码复杂度是否是 O(n3)O(n^3)

回复

6 条回复,欢迎继续交流。

正在加载回复...