poj 3320Jessica's Reading Problem 尺取法初探(首尾指针法)

排序--快速排序(前后指针法) 快速排序(前后指针法) 时间复杂度:最坏:O(n^2)–>不会出现 最好:O(nlogn) 平均:O(nlogn) 空间复杂度:O(logn) 函数调用栈, 极端情况: O(n)–>不会出现 稳定性:不稳定 数据敏感:敏感 #include<stdio.h> //升序 void Swap(int* array, int i, int j) { int tmp = array[i]; array[i] = array[j]; array[j] = tmp; } //三 阅读详情

题意:某穷屌丝为了顺利成为白富美的备胎,准备在一串数字中找到一个最短区间,该区间包含所有出现过的数字。

尺取法一般思路

整个过程分为4布:

    1.初始化左右端点

    2.不断扩大右端点,直到满足条件

    3.如果第二步中无法满足条件(右端点超出大区间),则终止,否则更新结果

    4.将左端点扩大1,然后回到第二步

尺取法复杂度为o(n)

该题数字范围较大不能用数组判重,用map和set来代替

#include<stdio.h>
#include<string.h>
#include<map>
#include<set>
int a[1000001];
using namespace std;
int main()
   { int head,end,i,j,k,m,n;
     
     set<int> b;
     map<int,int> cnt;
     while(~scanf("%d",&n))
       {b.clear();
        cnt.clear();
       	for(i=0;i<n;i++)
       	  {scanf("%d",&a[i]);
       	   b.insert(a[i]);	
			 }
	    int count=b.size();
	    int sum=n+1;
	    int cnt1=0;
		head=0;end=0;
		while(end!=n)
		  {while(end<n && cnt1<count)
		     {if(cnt[a[end]]==0)cnt1++;
		         cnt[a[end]]++;
		         end++;	
				}
		      while(cnt[a[head]]>1)
			    {cnt[a[head]]--;
				 head++;
					}
			  if(cnt1==count)
			    {sum=min(sum,end-head);
			     cnt[a[head]]--;
				 head++;
				 cnt1--;	
					} 			
		        }
		printf("%d\n",sum);				 
	   }
   	return 0;
	} 



cf 670D2 Magic Powder - 2 二分裸题 D2. Magic Powder - 2 time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard outputWaking up in the morning, Apollinaria decided to bake cookies. To bake o 阅读详情

相关推荐

机器视觉--线扫相机触发:从原理到选型,构建高效成像方案

本文深入解析线扫相机触发技术,从硬件编码器触发到软件触发方案,提供详细的性能对比和选型指南。通过实际案例展示如何构建高效成像方案,特别适合机器视觉领域需要精准控制的应用场景,如工业检测和自动化生产线。

weixin_42531886的博客 415

数据结构算法专题—双指针

数据结构算法专题—双指针

m0_48683294的博客 736

四大AI编程工具深度对比:Claude Code、Codex、OpenCode与WorkBuddy选型指南

AI编程助手正从代码补全走向自主执行的智能体形态,其核心原理是通过“规划-执行-观察”循环让模型自主完成文件修改、命令运行与错误修复。这类工具的技术价值在于提升长任务连续性与上下文理解能力,同时通过自定义指令与技能机制沉淀团队规范,适应不同工程场景。在实际选型中,开发者常面临终端CLI与图形化工作台、模型开放程度与绑定生态之间的权衡:Claude Code强调深度Agent体验,Codex支持灵活接入OpenAI兼容模型,OpenCode以开源多模型见长,WorkBuddy则提供全流程集成环境。本文基于真实

weixin_42526166的博客 135

首尾指针法简单小结

以一道题目的优化过程来浅显的说一说首尾指针法 这是一道leetcode的题目 我之前的博客记录过 博客中我的做法就是比较常规的记录每个位置的左右最大值 1.第一种优化 只用一个数组记录每个位置右边最大值,不记录左边最大值,左边最大值用一个变量来记录即可,这样节省了空间,其他步骤相同 2.第二种优化,使用首尾指针 大体逻辑延续上面的做法,首尾两个位置是不可能有雨水装的。 首尾指针怎么做,逻辑如下:分别记录左右指针左右两边的当前最大值,然后每次解决左右最大值中的较小值并移动左或右指针。 为什么能这么做(正确性

weixin_40208575的博客 1044

MATLAB配置MinGW编译器的完整指南

本文提供了在Windows系统上为MATLAB配置MinGW编译器的完整指南。详细介绍了通过MATLAB附加功能管理器在线安装和手动离线安装两种核心方法,并重点说明了如何解决常见的“未找到支持的编译器”等错误。指南包含从版本检查、环境变量配置到最终使用mex命令验证的每一步,帮助用户顺利完成MATLAB与MinGW的集成,以支持C/C++代码编译。

weixin_29031057的博客 264

海波龙(Oracle Hyperion)单点登陆问题记录

Oracle海波龙套件已经多年未更新,按Oracle官方文档实施单点登陆启用之后,SmartView工具通过专用链接方式无法登陆系统。 在抓包逆向分析之后 定位到HspSmartViewServlet类在执行以下代码时获得的ssotoken无效导致,在某大厂工作的时候曾通过在filter中截获请求的方式植入Attribute,保留账号密码并在单点程序中处理实现登陆。 但在完美世界的环境中...

cainiaoEzu的专栏 1970

js首尾指针

将一个数组里的数字中奇数放前面,偶数放后面。 解法原理:在首尾设置指针, 1.首部指针从头到尾遍历,一遇到偶数则停下 2.尾部指针从后面往前遍历,一遇到奇数就停下 3.首指针和尾指针的元素互换 4.如果首指针和尾指针还没相遇,则继续第1步,否则结束 此时数组元素就保证奇数在前,偶数在后了。 代码如下: // const target = Array(10).fill(0).map((_,i)=>i+1); // 造个随机正整数组成的数组 const target = Array(

Coffee coder 514

基于ADRC算法的多旋翼飞行器抗扰动控制实践

本文详细介绍了基于ADRC算法的多旋翼飞行器抗扰动控制实践,通过线性扩张状态观测器(LESO)实时估算风力等扰动,实现提前补偿,显著提升飞行稳定性。文章结合具体案例和工程实现技巧,展示了ADRC在突风条件下的优异表现,为无人机控制提供了高效解决方案。

weixin_29284885的博客 191

LeetCode分类刷题之双指针(首尾指针)

LeetCode题目太多了,每天随便选题刷没有针对性,效率也很低,今天做了明天就忘了解法。分类刷题效率高,且解题思路形成套路可以更好的举一反三,时间有限的情况下非常推荐分类刷题。 本文及后面的记录文章,所有解法均使用python。 目录 1.两数之和-有序数组(python中数组对应列表,栈也可对应列表) 2.两数的平方和 3.反转字符串中元音字母 4.验证回文串 5.验证回文字符串(加强版) 6.反转字符串 7.盛最多水的容器 1.两数之和-有序数组(python中数组对应列表,栈也可

hesongzefairy的博客 673

ProcessingJoy —— 最简单的实时流体模拟【JAVA】

实现基于非常非常经典的 Paper ——Jos Stam 的Real-Time Fluid Dynamics for Games 代码和注释 float visc = 0.0f; float diff = 0.0f; int N = 250; int size = (N + 2) * (N + 2); float[] u = new float[size]; // 速度, 水平/竖直 float[] v = new float[size]; float[] u_prev = new fl...

ShaderJoy 的兴趣技术杂货铺 2815

飞牛fnNAS虚拟机标准安装

飞牛NAS是一款基于Debian开发的国产免费NAS系统,支持x86架构设备,可将闲置硬件改造为NAS服务器。系统安装简便,支持多种存储模式与硬盘休眠功能,具备智能影视管理、照片备份等实用功能,并提供多种远程访问方式。飞牛NAS还支持Docker扩展,目前已承诺永久免费。文章详细介绍了在VMware虚拟机中安装飞牛NAS的步骤,包括下载镜像、创建虚拟机、初始化设置等过程,并展示了创建共享文件夹等基本操作,帮助用户快速上手这款功能强大的免费NAS系统。

dgnankai的专栏 3256

poj 3320 Jessica's Reading Problem

DescriptionJessica’s a very lovely girl wooed by lots of boys. Recently she has a problem. The final exam is coming, yet she has spent little time on it. If she wants to pass it, she has to master all

菜鸟起飞的平台 321

使用MATLAB和Simulink来设计并仿真一个智能家居火灾报警系统

智能家居火灾报警系统旨在通过烟雾传感器、温度传感器等设备监测家庭环境,一旦检测到异常情况(如烟雾或温度骤升),立即触发警报并采取相应措施。在这个教程中,我们将使用MATLAB和Simulink来设计并仿真一个智能家居火灾报警系统,包括数据采集、处理以及响应机制。

amy_mhd的博客 162

POJ:3320 Jessica's Reading Problem

watashi书上的例题,用了一个叫尺取法的东西,两个例题都是求最短区间的问题。主要是维护首尾两个指针i,j。当区间满足要求的时候,不断增大i以缩小区间长度来看是否能达到最优解,如果区间不满足要求,则增大j。 这个题关于知识点的东西很难表示,用了map。当出现一个新的知识点,此时map中的元素等于出现的知识点时说明满足要求。当失去一个知识点使得map中的元素个数不等于出现的知识点时则不满足要求。

Fighting 778

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

快速排序(前后指针法)

之前的两篇中,为大家介绍了霍尔划分和挖坑法划分,这一篇,我们来看看第三种划分方法——前后指针法。 前后指针法 顾名思义,需要两个指针,一个在前一个在后,分别用cur表示前指针,prev表示后指针(这里的指针的意思是待排序数列的下标),依旧是这个图,初始时,我们规定cur在prev的后一个位置,这里我们还是选择第一个数为基准值,如下图 箭头指向的为基准值,prev指向这个数列开始的第一个,cur指向prev的后一个位置,此时我们便将它初始化完成。那么现在需要怎么操作呢? 我们规定,prev每次都需要指向从左

qq_44819750的博客 3004

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

排序三--快速排序之前后指针法

  这次我继续给大家介绍的排序是快速排序,为什么快速排序单独提出来说一下,是因为快速排序其实可以从他的名字来看出来,快速排序,一定是相对于其他排序来说在某种程度上时间复杂度相对来说还是比较低的,并且快速排序是有好几种实现方式的。今天就给大家具体的介绍一下快速排序到底是个怎么回事。  首先要说的是我们的第一种实现方法----前后指针法,通过两个指针,前边的指针找比基准值小的元素,后边的指针找比基准值...

Hanani_Jia的博客 4021

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

hdu 1370 中国剩余定理

首先介绍一下中国剩余定理,在寒假回来的飞机上曾经看过证明……但是看着看着就睡着了……先把方法写上,证明以后再补吧……(虽然也只会最简单的三个数的,还互素……) 中国剩余定理介绍了这样一个问题,有这样一个数x,x%a=a1,x%b=b1,x%c=c1,求这个数x。(a,b,c互素) 首先求出三个数的逆元a2,b2,c2,如,a的逆元a2就是b1*c1*a2%a==1; 于是这个

ctrss的博客 1515

poj2407欧拉函数模板

第一次接触欧拉函数,phi(x)为小于等于x且与x互质的数的个数……先介绍一些基本定理 1.定义在所有正整数上的函数成为算数函数。 2.一个算术函数f,如果对于两个互素整数m,n有f(nm)=f(n)*f(m)则称f为积性函数。如果对于任意两个正整数mn有f(nm)=f(n)*f(m)则称f为完全积性函数。 3.如果f是一个积性函数,则对于正整数n=p1^a1*p2^a2……(pi为素数),

ctrss的博客 1008

dinic网络流前向星写法

终于照着模板打了一遍前向星…… 虽然还不是太懂…… 直接上代码吧……依然是poj1273的题 #include #include #include #include #define M 400 int INF=10000001; using namespace std; struct node { int u,v,cap,next; }; node edge[M*M]; int

ctrss的博客 976

zoj 1196 Fast Food 变种区间dp

好吧,其实我觉得这个题在一开始想的时候与区间dp还是有点差别的……虽然写出来跟区间dp确实差不多 Fast Food Time Limit: 2 Seconds      Memory Limit: 65536 KB The fastfood chain McBurger owns several restaurants along a highway. Recently,

ctrss的博客 953

hdu 4355 Party All the Time 初识三分法

以前听到三分法的时候总是一脸懵逼,心想三分了怎么继续确定区间,三分的两个点又怎么确定?想破头也想不出来。 今天偷偷看了西工大某美女姐姐(好吧,虽然没见过,就这么叫吧)的博客,发现三分竟然是有特定条件的…… 先来说说三分法,据前人的研究,三分法适用于凹凸函数求它的凹凸点。与二分法不同的是三分法将mid点与r点的中间点也并入讨论,设其为mmid点。 显然,mmid>mid. 以凹函数为例子,求

ctrss的博客 914

cf676c Vasya and String 尺取法裸题

C. Vasya and String time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output High school student Vasya got a string o

ctrss的博客 910

CF 699D Fix a Tree 并查集

D. Fix a Tree time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output A tree is an undirected connected graph witho

ctrss的博客 779

poj1681Painter's Problem 增广矩阵消元法错误水过版

Painter's Problem Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 5519   Accepted: 2660 Description There is a square wall which is made of n*n small square

ctrss的博客 742

poj 1284欧拉函数求素数元根个数

Primitive Roots Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 3601   Accepted: 2101 Description We say that integer x, 0 i mod p) | 1 <= i <= p-1 } is eq

ctrss的博客 688

poj 1222 EXTENDED LIGHTS OUT 增广矩阵消元法

EXTENDED LIGHTS OUT Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 8682   Accepted: 5624 Description In an extended version of the game Lights Out, is a puz

ctrss的博客 653
下一篇: codeforces#324(div2)B Kolya and Tanya(数论水)
ctrss
博客等级 码龄11年 1粉丝 35原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值