最长连续不重复子序列
发布日期: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操作,直接通过索引调整实现更高效率的算法运行。该优化后代码在同等数据量下可以达到近乎一倍的执行效率。

上一篇:单调栈
下一篇:归并排序,快速排序,逆序数

发表评论

最新留言

感谢大佬
[***.8.128.20]2025年04月23日 14时16分13秒