
最长连续不重复子序列
发布日期:2021-05-14 16:43:22
浏览次数:23
分类:精选文章
本文共 806 字,大约阅读时间需要 2 分钟。
优化代码示例如下:
#include #include #include using namespace std;int a[1000005];int s[1000005];int main(){ int i, j; int n; int res = 0; scanf("%d", &n); // 初始化数组a的值 for (i = 0; i < n; ++i) { scanf("%d", &a[i]); } // 优化后的实现:去掉了多余的swap函数和辅助数组 for (i = 0, j = 0; i < n; ++i) { // 遍历数组时直接处理当前元素 if (a[i] == s[a[i]]) { s[a[i]]--; j++; } else { // 调整i和j指针,跳过重复的元素 while (a[i] != s[a[i]]) { s[a[i]]--; i++; } i--; } } // 结果更新 size_t max_len = j - 1; res = max(res, max_len); printf("%d\n", res); return 0;}
以上是对原暴力算法的基本优化,在处理相同元素时避免了复杂的swap操作,直接通过索引调整实现更高效率的算法运行。该优化后代码在同等数据量下可以达到近乎一倍的执行效率。