当前位置: 首页 > 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.dtcms.com/a/195160.html

相关文章:

  • 西安前端面试
  • 机器学习中的特征工程:解锁模型性能的关键
  • 计算机组成原理——数据的表示
  • 代码随想录 算法训练 Day3:链表1
  • 隧道结构安全在线监测系统解决方案
  • 从裸机开发到实时操作系统:FreeRTOS详解与实战指南
  • 英飞凌TLE9945GPT12
  • SSH主机密钥验证失败:全面解决方案与技术手册
  • 【言语】刷题5(填空)
  • MySQL数据库——支持远程IP访问的设置方法总结
  • 【RabbitMQ】消息丢失问题排查与解决
  • 将单链表反转【数据结构练习题】
  • (for 循环) VS (LINQ) 性能比拼 ——c#
  • 半导体供应链B2B集成时应该注意的要点
  • vue3中预览Excel文件
  • Spring三级缓存的作用与原理详解
  • 【每天一个知识点】意图传播(Intent Propagation)
  • 单例模式深度解析:从原理到高阶应用实践
  • 文章记单词 | 第89篇(六级)
  • jvm第一篇《内存与垃圾回收》学习笔记第一章jvm初始
  • 计算机图形学编程(使用OpenGL和C++)(第2版)学习笔记 10.增强表面细节(二)法线贴图
  • [MySQL排查] “Too many connections“ 错误?数据库最大连接数满了怎么办及优化
  • 我的 PDF 工具箱:CodeBuddy 打造 PDFMagician 的全过程记录
  • Jenkins教程
  • C#将1GB大图裁剪为8张图片
  • Ngrok 配置:实现 Uniapp 前后端项目内网穿透
  • vue使用Fabric和pdfjs完成合同签章及批注
  • 解决LeetCode 47. 全排列 II 问题的正确姿势:深入分析剪枝与状态跟踪
  • MySQL的 JOIN 优化终极指南
  • ES(Elasticsearch)的应用与代码示例