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

刷leetcodehot100返航版--双指针5/16

for (int i = 0, j = 0; i < n; i ++ )
{
    while (j < i && check(i, j)) j ++ ;

    // 具体问题的逻辑
}
常见问题分类:
    (1) 对于一个序列,用两个指针维护一段区间
    (2) 对于两个序列,维护某种次序,比如归并排序中合并两个有序序列的操作

核心思想:把for i{for j}O(n^2)优化为O(n)

朴素做法——>O(n)

1.最长连续不重复子序列【看解析】

799. 最长连续不重复子序列 - AcWing题库

e.g.12245

最长连续不重复子序列:245

一般思路:确定起止点,双层for遍历,比如i是终止点,j是子序列起始点;for 0~n-1 看有没有重,计max的子序列长度

优化:在这个过程中,其实随着i增大,j是不会往左走的,因为重复的子序列不会向左增加

也就是j其实在i遍历过程是单调递增的【当然也可以不增,起码不减】,就省了j的遍历

有一点点像:

128. 最长连续序列 - 力扣(LeetCode)

主体思路是遍历子序列最后一个元素,判断j是不是要往右移

其中,判断重复与否用到的是unordered_map

#include<iostream>
#include<algorithm>//algorithm
#include<unordered_map>
using namespace std;int main(){//请找出最长的不包含重复的数的连续区间int n;cin>>n;vector<int>nums(n);for(int i = 0;i<n;i++){cin>>nums[i];}unordered_map<int,int> s;//初始化int maxNum = 0;int j = 0;//j是子序列的开头int i;for(i = 0;i<n;i++){//i是结尾s[nums[i]]++;while(i>j){// if(s[i] != s[j]){//判断不重复不合理if(s[nums[i]]>1){//每次其实新加的是第i个元素s[nums[j]]--;//删除的是j对应元素j ++;}else{//没写break;}//没保存max}maxNum = max(i-j+1,maxNum);}cout<<maxNum<<endl;
}

http://www.xdnf.cn/news/486235.html

相关文章:

  • 虚拟来电 4.3.0 |集虚拟来电与短信于一体,解锁VIP优雅脱身
  • 腾讯云代码助手CodeBuddy使用体验
  • 7.1Java多线程安全和同步
  • vue 指令
  • python版本管理工具-pyenv轻松切换多个Python版本
  • DATE_FORMAT可以接收date类型,也可以接收String类型!
  • this.$set的用法-响应式数据更新
  • oracle主备切换参考
  • 初学者如何用 Python 写第一个爬虫?
  • 【LLM】大模型落地应用的技术 ——— 推理训练 MOE,AI搜索 RAG,AI Agent MCP
  • ​小店推客系统开发SEO全攻略:从技术架构到流量裂变,打造私域增长引擎
  • Android framework 中间件开发(二)
  • 贝叶斯英文单词拼写纠错器(Python)
  • 小型研发团队的项目管理:挑战与高效工具推荐
  • 实时数据流处理的利器:如何利用 Spark Streaming 让数据动起来?
  • Java 流(Stream)API
  • CSS- 3.1 盒子模型-块级元素、行内元素、行内块级元素和display属性
  • MySQL高效开发规范
  • 不清楚的点
  • RNope:结合 RoPE 和 NoPE 的长文本建模架构
  • git相关配置
  • 深入理解 this 指向与作用域解析
  • 使用 gcloud CLI 自动化管理 Google Cloud 虚拟机
  • AGI大模型(19):下载模型到本地之ModelScope(魔搭社区)
  • FreeSWITCH Jitter Buffer 技术解析与应用指南
  • OpenCV边界填充(Border Padding)详解:原理、方法与代码实现
  • TDuckX 2.6 正式发布|API 能力开放,核心表单逻辑重构,多项实用功能上线。
  • 【AI模型部署】
  • [模型部署] 1. 模型导出
  • 使用DDR4控制器实现多通道数据读写(十二)