首页 > 其他分享 >双指针

双指针

时间:2023-03-05 18:12:49浏览次数:27  
标签:int res ++ 数组 区间 指针

双指针

同向双指针

能够实现跳跃寻找,适用于寻找含有某一特性区间,比如最长相同区间,最长不重复区间

不重复区间可以用一个数组t[N]来表示,如果其中元素大于1,说明有重复

int res=0,j=0;
for(int i=0;i<n;i++)
{
    t[a[i]]++;//记录个数
    while(j<i&&t[a[i]]>1) t[a[j++]]--;//改变区间
    if(i-j+1>res) res=i-j+1;
}

相同区间用第二个指针移动来寻找下一个不相同的位置,可计算出区间长度

int num=0;
char ans;
for(int i=0;i<s.size();)
{
    int j=i;
    while(j<s.size()&&s[j]==s[i]) j++;
    if(j-i>num) num=j-i,ans=s[i];
    i=j;
}

双向双指针

一个从前往后走,一个从后往前走

使得与暴力循环两个数组不同的是,j不会回退

例子:给定两个升序排序的有序数组 AB,以及一个目标值 x

for (int i = 0, j = m - 1; i < n; i ++) {
    while(j >= 0 && a[i] + b[j] > k) j --;
    if(j >= 0 && a[i] + b[j] == k) printf("%d %d\n", i, j);
}

中向双指针

两个指针从左右两侧开始移动直到相遇

例:快速排序中根据轴值划分,调整奇偶序列,翻转数组

while(i<j) //未相遇继续循环
{
    while(state) i++;
    while(state) j--;
    if(i<j) swap(x,y);
}

标签:int,res,++,数组,区间,指针
From: https://www.cnblogs.com/mpmp/p/17181173.html

相关文章

  • 通过基类指针访问派生类
    可以使用多态性来通过基类指针访问子类。当一个基类的指针指向一个派生类的对象时,可以使用以下方式访问子类。使用虚函数将函数声明为虚函数,并在派生类中重写该函数,然后......
  • golang的指针变量,智商声明没有赋值,不能直接 *p=123之类的
    packagemainimport"fmt"funcmain(){ //申明指针的时候,如果没有指向某个变量,默认值为nil //不能直接进行操作,包括读写 //而用new返回的是有默认值的指针,为数据......
  • 相同的树(树)、买卖股票的最佳时机 II(贪心、数组)、下一个排列(数组、双指针)
    相同的树(树)给你两棵二叉树的根节点p和q,编写一个函数来检验这两棵树是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。示例1:输入:p=[......
  • 迷失的this指针
    在调试客户崩溃dmp文件时,已经恢复了异常栈,需要查看当前的对象,但是this指针如下 很明显,这个值不对,ecx指针的值被修改做它用了。没关系,可以查看函数汇编,看看this指针保存......
  • C/C++ 数据结构优先级队列的实现(使用二级指针)
    #include<iostream>#include<Windows.h>#include<iomanip>//优先级队列的实现usingnamespacestd;#defineMaxSize5typedefintDataType;//队列中的元素类型......
  • 填充每个节点的下一个右侧节点的指针
    填充每个节点的下一个右侧节点的指针给定一个二叉树:structNode{intval;Node*left;Node*right;Node*next;}填充它的每个next指针,让这个指针指向其下一个右......
  • 指针和数组笔试题解析
    在大多数情况下,数组名就是数组首元素的地址,但是有两种特殊情况:一、sizeof(数组名):当数组名单独放在sizeof内部,指的是整个数组二、&数组名:取的是整个数组的地址,但是结果和首......
  • C++智能指针详解(共享指针,唯一指针,自动指针)
    前言:智能指针在C++11中引入,分为三类:shared_ptr:共享指针unique_ptr:唯一指针auto_ptr:自动指针一、共享指针几个共享指针可以指向同一个对象;每当shared_ptr的最后一个所有者......
  • 3.3 C提高 指针 字符串
    扩展1.指针变量和它指向的内存块是两个不同的概念指针(本身也有东西)~内容点击查看代码注意//写内存时,一定要确保内存可写 char*buf2="sadgkdsjlgjlsdk";//文......
  • 指针与数组、多级指针
    指针和数组:数组名: 【数组名是地址常量】---不可以被赋值。 ++/--/+=/-=/%=//=(带有副作用的运算符) 指针是变量。可以用数组名给指针赋值。++--......