首页 > 其他分享 >认识双指针

认识双指针

时间:2024-10-11 20:43:25浏览次数:7  
标签:遍历 认识 元素 链表 查找 数组 指针

  1. 基本概念
    双指针:通常是指在数组或链表中使用两个指针(索引)来遍历或操作数据结构。
    方向:指针可以同向移动(如快慢指针),也可以相向移动(如对撞指针)。
    应用场景:适用于需要遍历整个数据结构并进行某种操作的情况,如查找、排序、反转等。
  2. 常见类型
    2.1 快慢指针
    定义:两个指针从同一端开始移动,但速度不同。
    应用:
    链表中的环检测:快指针每次移动两步,慢指针每次移动一步,如果链表中有环,快慢指针最终会相遇。
    数组中的删除元素:通过双指针重排数组,删除特定元素。
    2.2 对撞指针
    定义:两个指针从相对的两端开始向中间移动。
    应用:
    二分查找:在有序数组中查找特定元素。
    两数之和问题:在有序数组中查找两个数使其和为特定值。
    三数之和问题:在数组中查找三个数使其和为特定值。
  3. 常见问题
    3.1 两数之和
    问题描述:在一个有序数组中找到两个数,使其和等于给定的值。
    解法:使用左右指针,从数组的两端开始,如果和大于目标值,右指针左移;如果和小于目标值,左指针右移。
    3.2 反转数组
    问题描述:反转数组中的元素顺序。
    解法:使用左右指针,交换两端的元素,直到指针相遇。
    3.3 删除重复元素
    问题描述:删除数组中的重复元素,使其每个元素只出现一次。
    解法:使用快慢指针,快指针遍历数组,慢指针指向新数组的末尾。
  4. 复杂度分析
    时间复杂度:通常为 O(n),因为双指针算法通常只需要遍历一次数组或链表。
    空间复杂度:通常为 O(1),因为只需要常数级别的额外空间

标签:遍历,认识,元素,链表,查找,数组,指针
From: https://www.cnblogs.com/wjhfree/p/18459303

相关文章

  • C#项目传递图像指针到C++项目,并转换成cv::Mat图像
    一、C#传递指针地址到C++项目1、C++代码。新建C++/CLR.NetFramewrok4.8项目 .h文件#pragmaonce#include<opencv2/opencv.hpp>extern"C"__declspec(dllexport)intCropImage(cv::Mat&image,inth,intw);.cpp文件intCropImage(cv::Mat&image,inth,in......
  • 浅拷贝和深拷贝的概念与值拷贝和指针拷贝(引用拷贝)有关 浅拷贝 “指针拷贝 深拷
    在Python中,浅拷贝和深拷贝的概念与值拷贝和指针拷贝(引用拷贝)有关,但它们并不完全相同。下面是它们之间的关系和区别:浅拷贝(ShallowCopy):类似于“指针拷贝”或“引用拷贝”。浅拷贝创建了一个新的对象,但是它所含的容器对象(例如列表、字典、类的实例等)仍然指向原始对象中的容器......
  • 认识Pulsar
    功能Pulsar是一种用于服务器到服务器消息传递的多租户、高性能解决方案。Pulsar最初由Yahoo开发,由Apache软件基金会管理。Pulsar是由Apache软件基金会开发的分布式发布/订阅消息系统,它结合了传统消息系统(如RabbitMQ)和发布-订阅系统(如ApacheKafka)的最佳特性,为可伸缩......
  • 程序设计基础I-实验8 指针(函数题)
    6-1sdut-C语言实验-n个数的排序Qiao当上了体育委员,现在老师让他去给班级里的人排队,Qiao刚学了排序,所以他想以这种方式给班级里的人排队(从矮到高),他想知道排序完成后的结果。函数接口定义:voidsort(int*p,intn);其中p和n都是用户传入的参数。p的值为传递过来的地址;......
  • 面向对象进阶-认识多态
    2024-10-10,今天的课程比较多,改了很多线下的事情,今天先对多态进行了认识。什么是多态?同类型的对象,表现出的不同形态。多态的表现形式?父类类型对象的名称=new子类对象();fuf=newzi();多态的前提?1.有继承关系 2.有父类引用指向子类对象 3.有方法重写多态的好......
  • Boost C++ 库 | 智能指针(共享指针、共享数组、弱指针、介入式指针、指针容器)入门
    点击上方"蓝字"关注我们01、共享指针>>>这是使用率最高的智能指针,但是C++标准的第一版中缺少这种指针。它已经作为技术报告1(TR1)的一部分被添加到标准里了。如果开发环境支持的话,可以使用 memory 中定义的 std::shared_ptr。在BoostC++库里,这个智能指针命名为......
  • 42 C 语言 typedef:为基本数据类型、数组、指针、结构体、共用体起别名
    目录1 typedef介绍2 为某个基本类型起别名2.1为int类型起别名Integer2.2为unsignedchar类型起别名Byte2.3为基本类型一次起多个别名3 为结构体、共用体起别名3.1为结构体起别名3.1.1分开定义结构体和别名3.1.2与结构体定义一起使用typedef3.1.3为......
  • 指针 + 数组 较为复杂凌乱的 【笔试题】
    2024-10-10-笔记-25作者(Author):郑龙浩/仟濹(CSDN账号名)【指针+数组】的各种题型(笔试题)来自于鹏哥的网课,我做一下笔记119.【C语言进阶】笔试题详解(4)_哔哩哔哩_bilibili①题#include<stdio.h>intmain(){inta[5]={1,2,3,4,5};......
  • 关于常量指针和指针常量
    关于常量指针和指针常量知乎上看到一篇关于这两个概念的理解,感觉挺通俗易懂的,在此记录一下。①constintp;②constint*p;③intconst*p;④int*constp;⑤constint*constp;⑥intconst*constp;第一种是常量整数,没什么好说的。后面五种是指针,有一个简便的......
  • 43 C 程序动态内存分配:内存区域划分、void 指针、内存分配相关函数(malloc、calloc、re
    目录1 C程序内存区域划分1.1代码区(CodeSection)1.2全局/静态区(Global/StaticSection)1.3栈区(StackSection)1.4 堆区(HeapSection)1.5动态内存分配2void指针(无类型指针)2.1void指针介绍2.2void指针的作用2.3void指针的特点2.4 void指针类......