首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

至少有 K 个重复字符的最长子串----指针篇5,滑动窗口篇4,新人理解递归必看篇!!

所以,应该在 s 的所有包含 c 的子字符串中继续寻找结果:把 s 按照 c 分割(分割后每个子串都不包含 c),得到很多子字符串 t;下一步要求 t 作为源字符串的时候,它的最长的满足题意的子字符串长度...「二分」,相应的也无法直接使用「滑动窗口」思路的指针。...当我们使用指针的时候: 右端点往右移动必然会导致字符类型数量增加(或不变) 左端点往右移动必然会导致字符类型数量减少(或不变) 当然,我们还需要记录有多少字符符合要求(出现次数不少于 k),当区间内所有字符都符合时更新答案...但如果我们只从该性质出发的话,朴素解法应该是使用一个滑动窗口,不断的调整滑动窗口的左右边界,使其满足「左边界左侧的字符以及右边界右侧的字符一定不会出现在窗口中」,这实际上就是指针解法,但是如果不先敲定...因此我们需要先利用字符数量有限性(可枚举)作为切入点,使得「答案子串的左边界左侧的字符以及右边界右侧的字符一定不会出现在子串中」这一性质在指针的实现下具有单调性。

62720

C++复习笔记——C++ 关键字

new运算符总是返回一个指针。由 new 创建 this this 返回调用者本身的指针。...explicit explicit(显式的)的作用是"禁止单参数构造函数"被用于自动型别转换,其中比较典型的例子就是容器类型。在这种类型的构造函数中你可以将初始长度作为参数传递给构造函数。...类的静态成员变量必须在声明它的文件范围内进行初始化才能使用,private类型的也例外。...void void(空的),可以作为函数返回值,表明返回任何数据;可以作为参数,表明没有参数传入(C++中不是必须的);可以作为指针使用。...double double(精度)类型,C++ 中的基本数据结构,以精度形式存储一个浮点数。 mutable mutable(易变的)是 C++ 中一个不常用的关键字。

1.3K30
您找到你想要的搜索结果了吗?
是的
没有找到

C++ 中的容器类详解

3、list 非连续存储结构,具有链表结构,每个元素维护一对前向和后向指针,因此支持前向/后向遍历。...f、当要存储的是大型负责类对象时,list要优于vector;当然这时候也可以用vector来存储指向对象的指针,同样会取得较高的效率,但是指针的维护非常容易出错,因此推荐使用。...pointer 容器中存放元素类型指针 iterator 指向容器中存放元素类型的迭代器 const_iterator 指向容器中存放元素类型的常量迭代器,只能读取容器中的元素 reverse_iterator...STL内部实现时,首先分配一个非常大的内存空间预备进行存储,即capacity()函数返回的大小,当超过此分配的空间时再整体重新放分配一块内存存储,这给人以vector可以指定vector即一个连续内存的大小的感觉...(2) 只能在vector的最后进行push和pop,不能在vector的头进行push和pop。

76720

CC++工程师面试题(指针篇)

什么是函数指针,如何定义函数指针,与指针函数有何区别 参考链接:函数指针指针函数区别 智能指针 参考链接:智能指针的用法 指针常量和常量指针和常量指针常量 define与const关键字的多种用法...为什么? 能。 原因:因为在编译时对象就绑定了函数地址,和指针空没关系。 说说使用指针需要注意什么?...指针可以被声明为nullptr,表示指向空地址,而引用必须始终绑定到一个有效的对象上。 指针可以进行算术运算,比如加减,以及指针与整数进行加减运算,而引用只能作为变量的别名使用,不能进行算术运算。...) 注意在使用 void * 指针时,为了正确解引用指针并获取其指向的值,需要在使用前进行类型转换。...无法进行指针运算 malloc返回的就是void *指针 下面代码中使用了 (int*)、(double*) 和 (char*) 分别进行了类型转换。

13110

【笔记】《C++Primer》—— 第7章:类

,但是可以在外部定义 在类内定义的函数默认是隐式的内联函数 调用对象的成员函数时,实际上是将对象作为this指针指向的目标传入后执行了一个函数 也即是说,this是类的一个隐式常量指针,指向当前所用的这个实例对象...成员函数若以引用形式返回*this,则此时返回的是常量引用 尽量避免在多处使用相同的代码,所以尽量把类似的功能写为函数并迭代组合使用 类可以声明而暂时不定义,此时成为前向声明,得到的类是不完全类型,可以作为参数...,一旦遇到类名,定义的剩余部分就在类的作用域之内了,这里的剩余部分即后面的参数列表和函数体,包含前面的返回部分 好好理解第一点就可以理解为什么当外部定义的函数名中出现了对其类的指示后,后面就不再需要这个指示的出现了...(冒号)来访问它,也可以正常地用对象来访问(但注意它不属于哪个对象) 成员函数可以不通过作用域运算符直接使用静态成员 注意类似explicit关键字,static关键字只出现在类的声明里,不能在外部重复这个关键字...静态成员的好处是它类似指针类型可以在类内作为非完全类型被成员声明所采用 另一个好处是静态成员可以成为函数的默认实参

58620

面试常考知识点总结——面试必看

使用同一块共享内存的进程使用的虚拟地址相同吗?为什么?...③不定长数据结构:多数情况下使用不定长数据结构,第一种方法可以规定一个特殊的符号作为结束符,每当遇到这个结束符才认为该报文接收结束,但是该方法只适用于字符数据,因为对其他二进制数据无法确定是结束符还是要发送的数据...答:HTTP协议的报头是用来区分报文的类型,比如客户端发送一个请求报文,那么该报文是请求报文就要在报头中说明,是响应报文也要在报头中说明。 GET/POST static有什么用途?...,这个函数接收this指针,因而只能访问类的static成员变量 引用和指针有什么区别?...再有,当函数调用层次过深时也可能导致栈无法容纳这些调用的返回地址而造成栈溢出。 动态申请空间使用之后没有释放。由于C语言中没有垃圾资源自动回收机制,因此,需要程序主动释放已经不再使用的动态地址空间。

80720

特殊类设计以及C++中的类型转换

,定义了其实也没有什么意义,写反而还简单,而且如果定义了就不会防止成员函数内部拷贝了。...请设计一个类,只能在堆上创建对象 实现方式: 将类的构造函数私有,拷贝构造声明成私有。防止别人调用拷贝在栈上生成对象。...用一个成员函数来在堆上创建对象(因为类内能访问私有成员中的构造函数,类外不可以),那为什么要用static修饰GetObj?...请设计一个类,只能在栈上创建对象 将构造函数私有化,然后设计静态方法创建对象返回即可。...C语言中的类型转换 在C语言中,如果赋值运算符左右两侧类型不同,或者形参与实参类型匹配,或者返回类型与接收返回类型不一致时,就需要发生类型转化,C语言中总共有两种形式的类型转换: 隐式类型转换和显式类型转换

6310

Java集合--Queue(Java中实现2)

(); //获取并删除端队列的第一个元素(如果端队列为空,则返回null) E pollFirst(); //获取并删除该端队列的最后一个元素(如果端队列为空,则抛出异常...) E removeLast(); //获取并删除该端队列的最后一个元素(如果端队列为空,则返回null) E pollLast(); //获取但不删除端队列的第一个元素...(如果端队列为空,则抛出异常) E getFirst(); //获取但不删除端队列的第一个元素(如果端队列为空,则返回null) E peekFirst();...//获取但不删除端队列的最后一个元素(如果端队列为空,则抛出异常) E getLast(); //获取但不删除端队列的最后一个元素(如果端队列为空,则返回null) E...Deque继承了Queue的所有方法,自然可以当做队列来使用,依旧保持着“先进先出”的本质,在队头移除元素,在队尾添加元素; 但是,Deque还可以被当做“栈”来使用,即“后进先出”,添加元素、删除元素都在队头进行

1.4K50

CC++常见面试知识点总结附面试真题—-20220326更新

统一加减法,正负零问题 对于浮点类型的数据采用单精度类型(float)和精度类型(double)来存储,float数据占用32bit,double数据占用64bit,我们在声明一个变量float...delete get()返回指针使用get()初始化或reset另一个智能指针 get()返回的智能指针可能变成dangling pointer 如果智能指针管理的内存不是...引用只能在定义时被初始化一次,之后不可变;指针可变;引用“从一而终”,指针可以“见异思迁”; 3). 引用不能为空,指针可以为空; 4)....A f(); // 这个是不是可以看做声明了一个返回值为A的函数函数名为 f,参数无 A g(A()); // 这个是不是可以看做声明了一个返回值为A的函数函数名为 g, 参数类型函数指针,这个函数指针返回类型为...2. stack 中有 pop() 和 top() 方法,为什么直接用 pop() 实现弹出和取值的功能?

1.4K10

日拱算法:删除有序数组中的重复项

不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。 说明: 为什么返回数值是整数,但输出的答案是数组呢?...// 根据你的函数返回的长度, 它会打印出数组中 该长度范围内 的所有元素。...for (int i = 0; i < len; i++) {     print(nums[i]); } 示例 1: 输入:nums = [1,1,2] 输出:2, nums = [1,2] 解释:函数应该返回新的长度...示例 2: 输入:nums = [0,0,1,1,1,2,2,3,3,4] 输出:5, nums = [0,1,2,3,4] 解释:函数应该返回新的长度 5 , 并且原数组 nums 的前五个元素被修改为...我们需要一边遍历数组查找相同元素,一边在对比发现不同元素时修改数组元素,那么我们可以考虑指针法的快慢指针了,定义slow和fast作为指针; 初始化时指针slow指向数组的起始位置(nums[0]),

23410

锁优化

Hi~朋友,点点关注迷路 如果你不想平庸,就请勿停止前进的脚步。同样作为主流的开发语言,Java也没有停止前进,而是一直在优化进步。...摘要 为什么需要锁优化 锁的状态 偏向锁 轻量级锁 锁升级 锁消除 1....Java对象在虚拟机中大致分为三部分: 对象头 实例数据 对齐填充 对象头中存储对象自身运行时的数据(Mark Word)以及类型指针,而锁的状态则保存在Mark Word中。...对于竞争激烈的场合偏向锁的提升效果还是很明显的,但是竞争激烈的场合建议关闭偏向锁,可以使用-XX:-UseBiasedLocking此参数关闭偏向锁。 偏向锁的锁定和撤销的简要步骤如下: ?...它会将对象头部作为指针,指向持有锁的线程堆栈内部,来判断一个线程是否持有对象锁。如果成功,则可以进入临界区,失败以后会膨胀为重量级锁,但是膨胀后,虚拟机还会做最后一次努力优化,那就是自旋锁。

46730

嵌入式面试高频考点整理(建议收藏)

静态成员函数不含有this指针,所以可以作为回调函数。但同时为了可以访问类的成员变量可以将对象的this指针当做实参传入回调函数中。...常量指针:又叫常指针,可以理解为常量的指针,也即这个是指针,但指向的是个常量,这个常量是指针的值(地址),而不是地址指向的值。 引用作为函数参数以及返回值的好处[7] 在内存中产生被返回值的副本。...malloc的返回值为void*, 在使用时必须强转,new不需要,因为new后跟的是空间的类型。...② 请求与保持条件: 某进程已经保持了一个资源,但又请求另一个资源,若该资源被其他进程占有,此时请求阻塞,且对已经占有的资源释放; ③ 不可抢占条件: 进程获得的资源在未使用完时不可被抢占,只能在进程使用完时自己释放....html [7] 将“引用”作为函数返回类型的格式、好处和需要遵守的规则: https://blog.csdn.net/weibo1230123/article/details/82014538 [

65120

【C++初阶】C++入门

const_cast删除const变量的属性,方便赋值;dynamic_cast用于将一个父类对象的指针转换为子类对象的指针或引用;reinterpret_cast将一种类型转换为另一种不同的类型;static_cast...goto用于无条件跳转到函数内得标号处。一般情况建议使用goto,风险较大。...其它整数类型的signed省略或省略,含义不变。signed或unsigned可单独作为类型,相当于signed int和unsigned int。   ...public为公有的,访问不受限制;protected为保护的,只能在本类和友元中访问;private为私有的,只能在本类、派生类和友元中访问。...但在赋值运算符重载的时候要显示使用。静态成员函数没有this指针。 31、typedef typedef声明,为现有数据类型创建一个新的名字。便于程序的阅读和编写。

1.2K30

Go语言结构体

数组存的元素都是同一种数据类型,而结构体中可以存储不同类型的数据。结构体和指针为什么称Go语言是类C语言的重要原因,因为两者在这两个概念上是完全一致的。...结构体是由一系列相同类型或者不同类型的数据构成的数据集合。 在概念上,结构体表示某一事物的属性集合。...语法如下: var struct_pointer *Song struct_pointer = &song1 结构体作为函数参数 Go语言中结构体也可以作为函数参数传递,结构体指针也可以。...传结构体是值传递,相当于复制了一份送到函数中,函数修改的只是副本,不是原来的结构体变量;传结构体指针是引用传递,传进去的结构体变量的地址,对改地址指向的内容修改会直接作用到该构体变量。...当然,你可以通过函数返回值覆盖原值来是现更改,但这样做很麻烦,包含了复制、返回值、重新赋值等一系列操作,计算复杂度高了很多。

35310

3.Writing Larger Programs

4.引用与指针 指针和引用可以在C++中使用类似的用例。如前所述,引用和指针都可以在对函数的按次传递引用中使用。...下面的列表总结了指针和引用之间的一些差异,以及应该在何时使用它们: 引用: 引用在声明时必须初始化。这意味着引用将始终指向有意分配给它的数据。 指针指针可以在初始化的情况下声明。...引用: 当在用于按引用传递的函数使用时,该引用可以作为相同类型的变量使用指针: 在用于按引用传递的函数使用时,必须取消对指针的引用才能访问基础对象。 引用通常比指针更简单和安全。...作为一个很好的经验法则,在可能的情况下,应该使用引用来代替指针。 但是,有时不能使用引用。一个例子是对象初始化。您可能希望一个对象存储对另一个对象的引用。...但是,如果在创建第一个对象时另一个对象尚不可用,则第一个对象将需要使用指针,而不是引用,因为引用不能为空,只能在创建另一个对象后初始化引用。 5.

42920

前端面试什么样的回答才能让面试官满意_2023-03-01

使用 postMessage 方法,如果我们能够获得对应标签页的引用,就可以使用postMessage 方法,进行通信。 为什么 0.1 + 0.2 !...如果命中则根据头信息向服务器发起请求,使用协商缓存,如果协商缓存命中的话,则服务器返回资源,浏览器直接使用本地资源的副本,如果协商缓存命中,则浏览器返回最新的资源给浏览器。...核心思想: 调用call 的可能不是函数 this 可能传入 null 传入固定个数的参数 给对象绑定函数并调用 删除绑定的函数 函数可能有返回值 实现: Function.prototype.call1...核心思想: new 会产生一个新对象 新对象需要能够访问到构造函数的属性,所以需要重新指定它的原型 构造函数可能会显示返回对象与基本类型的情况(以及null) 步骤:使用new命令时,它后面的函数依次执行下面的步骤...判断函数返回类型,如果是值类型返回创建的对象。如果是引用类型,就返回这个引用类型的对象。

31720

【小Y学算法】⚡️每日LeetCode打卡⚡️——14.移除元素

不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。 说明: 为什么返回数值是整数,但输出的答案是数组呢?...// 根据你的函数返回的长度, 它会打印出数组中 该长度范围内 的所有元素。...例如,函数返回的新长度为 2 ,而 nums = [2,2,3,3] 或 nums = [2,2,0,0],也会被视作正确答案。...可以使用指针:右指针right指向当前将要处理的元素,左指针left指向下一个将要赋值的位置。...可以使用指针:右指针right指向当前将要处理的元素,左指针 left指向下一个将要赋值的位置。

30530

JVM之对象创建流程及对象内存布局

当类加载后,虚拟机将会为其分配内存,为其分配的内存大小是可知的,下面的内存布局将会讲解为什么是可知的。...分配内存 分配内存这时候有两种情况: 1.假如堆里面的内存是整齐的,用过的在一边,没有用过的内存放在另外一边(后期配图),这个时候中间有个指针作为两边内存的界限,当内存分配时,指针移动对象内存大小对应的距离即可...这两种情况又是根据采用的垃圾收集器是否带有空间压缩整理的能力划分,如果垃圾收集器已经具备了空间压缩整理的能力那么他的内存空间就是被整理好的,直接使用指针碰撞就好;但是如果是基于清除算法决定的垃圾回收器时...,但是这个是初始值,如果说当我分配完内存后直接使用这个字段的话程序肯定会出问题(因为CPU是乱序执行的,当两个操作互不关联时,一个操作耗时一个操作耗时,这时候CPU会进行优化让耗时的先运行。...2.类型指针 指向类的元数据信息,通过这个指针来确定该对象属于哪个类的实例。 (不是所有的虚拟机都必须在对象数据上设置类型指针) 当对象是数组。。。。

45810

【C++】特殊类设计

,不管是在栈区、堆区还是静态区;但是我们的目的是要能够在堆上创建对象,所以我们需要单独提供一个 CreateObj 成员函数,由于该类内不受访问限定符的限制,所以我们可以调用构造函数来创建一个堆上的对象并返回指向它的指针...但是 CreateObj 函数必须是静态的,因为如果是普通成员函数,则其第一个参数是隐藏的 this 指针,所以想要调用这个函数来创建对象就必须先有一个对象,然而在构造私有的情况下我们是不可能在类外通过其他方式创建出对象的...饿汉模式 饿汉模式的做法是将构造函数私有,然后删除拷贝构造和赋值重载函数;由于单例模式全局只允许有一个唯一对象,所以我们可以定义一个静态类对象作为类的成员,然后提供一个 GetInstance 接口来获取这个静态类对象...如下: static Singleton& GetInstance() { //第一次进入时创建类对象,以后进入直接返回类对象 //检查加锁 if (_psins == nullptr...我们可以在类中定义一个静态的 DelInstance 接口来回收与保存资源 (此函数不会被频繁调用,因此不需要使用检查加锁)。

20440

《Effective C++》读书摘要

十七、独立成句的new对象放入智能指针 将new对象转换为智能指针作为参数,可能会被编译器结合其他参数调整顺序,造成内存泄漏。...二十、常引用参数代替值传递 前者高效,但是对于内置类型除外。 二十一、需要返回对象时候不要返回引用 栈、堆、静态对象都不要作为引用返回。...二十三、用非成员函数和非友元函数替换成员函数 封装强度和改变强度成反比,因为只影响有限的用户; 类外访问函数封装性好于累内成员函数的封装性,增加累内私有数据的访问函数的数量; 二十四、参数需要类型转换应使用非成员函数...四十六、类型转换时为模板定义非成员函数 对于模板化的类要支持操作运算符重载,首先必须是非成员函数,另外为了能让模板具体化必须将函数定在类体内部,因此只能将之声明为友元类型。...可以根据iterator_traits提供的类别标签区分迭代器类型,类别标签是空结构体类型,将标签作为函数参数,可以保证编译器能在编译时期对类型进行检查。 ?

1.9K60
领券