当前位置: 首页 > news >正文

双指针(滑动窗口)相关算法题

双指针算法有时候也叫尺取法或者滑动窗口,是⼀种优化暴力枚举策略的手段:当我们发现在两层 for 循环的暴力枚举过程中,两个指针是可以不回退的,此时我们就可以利用两个指针不回退的性质来优化时间复杂度。因为双指针算法中,两个指针是朝着同一个方向移动的,因此也叫做同向双指针。
1.
    #include <iostream>
    #include <unordered_map>
    using namespace std;
    typedef long long LL;
    const int N=1e6+10;
    LL arr[N];
    int T,n;
    int main() 
    {cin >> T;while(T--){unordered_map<int,int> mp;cin >> n;for(int i=1;i<=n;i++){cin >> arr[i];}int left=1;int right=1;int ret =0;while(right<=n){mp[arr[right]]++;while(mp[arr[right]]>1){mp[arr[left]]--;left++;}ret=max(ret,right-left+1);right++;}cout << ret << endl;}return 0;
    }

    2.

    #include <iostream>
    #include <unordered_map>
    using namespace std;
    const int N=1e6+10;
    int arr[N];
    int n,m,cnt;
    int L,R;
    unordered_map<int,int> mp;
    int main() 
    {cin >> n >> m;for(int i=1;i<=n;i++){cin >> arr[i];}int left=1;int right=1;int ret=n+1;while(right <= n){mp[arr[right]]++;if(mp[arr[right]]==1){cnt++;}while(cnt==m){mp[arr[left]]--;if(mp[arr[left]]==0){cnt--;}if(right-left+1<ret){L=left;R=right;ret=right-left+1;}left++;}right++;}cout << L << " " << R << endl;return 0;
    }

    3.

    #include <iostream>
    #include <unordered_map>
    #include <string>
    using namespace std;
    const int N=1e6+10;
    string s;
    int cnt;
    unordered_map<char,int> mp;
    int main() 
    {cin >> s;int right=0;int left=0;int ret=N;while(right<s.size()){mp[s[right]]++;if(mp[s[right]]==1){cnt++;}while(cnt==26){ret=min(ret,right-left+1);mp[s[left]]--;if(mp[s[left]]==0){cnt--;}left++;}right++;}cout << ret << endl;return 0;
    }

    4.

    #include <iostream>
    using namespace std;
    const int N=1e5+10;
    int n,sum;
    int arr[N];
    int main() 
    {cin >> n;for(int i=1;i<=n;i++){cin >> arr[i];sum+=arr[i];}int left=1;int right=1;int ret=0,k=0;while(right<=n){k+=arr[right];while(2*k>=sum){ret=max(ret,sum-k);k-=arr[left];left++;}ret=max(ret,k);right++;}cout << ret << endl;return 0;
    }
    http://www.dtcms.com/a/286975.html

    相关文章:

  1. RLHF(基于人类反馈的强化学习),DPO(直接偏好优化), GRPO(组相对偏好优化)技术概述
  2. 鸿蒙开发--端云一体化--云对象
  3. 龙虎榜——20250718
  4. 【C++】红黑树,“红“与“黑”的较量
  5. 【18位数据次方提高数据输出速度】2022-3-9
  6. 多线程-1-基础写法
  7. 顺理成章学RL-1(based Stanford CS234 Reinforcement Learning)
  8. Webstorm 前端断点调试
  9. pom.xml文件中的${}变量从哪里传值
  10. Couchbase 可观测性最佳实践
  11. ModbusRTU转profibus网关与涡街液体流量计通讯读取流量计温度
  12. Android性能优化之启动优化
  13. python学智能算法(二十三)|SVM-几何距离
  14. Python 入门手札:从 0 到会--第九天Python的模块化编程--模块、包以及常见系统模块和第三方模块总结
  15. 微店平台商品详情接口技术实现指南
  16. C语言:预处理
  17. 软件测试全谱系深度解析:从单元到生产的质量保障体系
  18. JavaScript笔记
  19. 功能安全之BIST的基本原理
  20. 关于tftp怎么把res文件夹传输给开发板的操作步骤:
  21. 通过代码识别大小端模式
  22. 先让 AI 学会害怕,再让它握紧方向盘
  23. Unity 多人游戏框架学习系列六
  24. YT Config Tool 添加FreeRTOS模块
  25. 【linux V0.11】kernel(水)
  26. 2025年6月GESP(C++二级): 幂和数
  27. 游戏盾能否保护业务免受DDoS攻击吗?
  28. Django母婴商城项目实践(五)- 数据模型的搭建
  29. 【Python练习】 049. 编写一个函数,实现简单的文本编辑器功能,支持增删改查
  30. 你的品牌需要一个AI首席内容官——解构BrandCraft如何解决内容创作的终极痛点