自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

小何代码咖啡馆

小coder的学习记录

  • 博客(103)
  • 收藏
  • 关注

原创 (8)双指针练习:四数之和

本题与三数之和的思路基本一致,即排序+双指针算法,根据表达式。注意本题有数据溢出的情况。,再通过双指针算法得到。,所以先确定两个基数。

2024-05-21 13:03:15 179

原创 (7)双指针练习:三数之和

进行去重,但是这个思路的时间复杂度为O(N3)导致代码超时。在暴力的基础上可以考虑使用双指针算法对暴力枚举和。因为双指针可以取出连个数值,所以需要一层循环用于固定第三个数作为基数,假设为。本题如果直接使用暴力解法,那么可以考虑思路:排序+暴力枚举+使用。而因为数组已经经过了排序,所以可以参考。,因为三个数计算的结果为0,所以有。,而两个指针计算的和为。移动到等式的右侧后变为。,所以可以考虑定义一个。

2024-05-20 15:55:51 357

原创 (6)双指针练习:查找总价格为目标值的两个商品

进行比较,相等时返回两个加数即可,但是这种方法会超时,所以考虑其他方法。本题直观解法是暴力枚举,使用两层。指针从右向左遍历,第一种情况如果。指针从左向右遍历,一个。的数值大,所以可能存在。的数值小,所以可能存在。数组有序后,定义一个。

2024-05-19 13:55:52 134

原创 (5)双指针练习:有效三角形个数

对于其余两种情况来说,因为c已经大于b和a,那么c + b或者c + a均会大于其余两边。对于排序之后的数组来说可以很容易确定最大值的位置,将最大值作为第三边后就只需要判断其余两边之和是否大于这个最大值即可。在判断三个整数是否可以构成三角形时,假设三边分别为a、b和c,此时需要判断任意两边之和是否大于第三边,即。因为数组已经进行了排序,此时可以采用二分算法进行求解,但是使用双指针的算法会更优。),另外在判断是否能构成三角形时使用的三次判断,那么时间复杂度准确来说是O(本题最直观的解法就是通过三层。

2024-05-18 14:52:55 643

原创 (4)双指针练习:盛最多水的容器

根据上面的规律可以得出,因为遍历数组的过程中一定会出现width在减小的情况,为了使最后的v不变或者变大,只有改变height,如果出现一侧高度比另一侧高度小时,为了使height增大,需要移动小的一侧高度从而找到更高的高度,此时可以考虑使用双指针算法,左指针。本题最直观的解法就是暴力枚举,通过外层for循环枚举其中一条高,再固定内层for循环枚举另一条高,求出体积的最大值即可,但是直接使用暴力枚举的时间复杂度为O(N2)会出现超时。因为两个指针从两侧向中间移动确定高度,所以时间复杂度为O(N)

2024-05-17 14:24:26 281

原创 (3)双指针练习:快乐数

即810,那么说明在计算快乐数时,所有的给定数值最后的结果都会出现在[1, 810]这个范围中(鸽子巢),既然如此,根据鸽巢原理,假设数字变化的次数为811(鸽子),因为范围固定,那么最后一个数值肯定会再一次出现在[1, 810]这个范围中,此时就会出现结果循环,所以一定会出现至少一个数值是重复出现导致成环,所以不存在因为数值无限增大而导致死循环。鸽巢原理:有n个鸽子巢,有n+1个鸽子,如果将鸽子放入鸽子巢中,那么至少会存在一个鸽子巢中的鸽子数量大于或等于1。

2024-05-16 12:30:09 1317

原创 (2)双指针练习:复写零

对于双指针算法来说,有两种实现方式,第一种是异地复写,即开辟一个新空间,基本思路为遇到非0数字复写一次,遇到数字0复写两次,但是这个算法的空间复杂度为O(N),所以考虑原地复写。暴力的方法很简单,因为是复写,所以只需要遇到0先将0位置后面的数据进行挪动覆盖,但是注意要从尾部开始挪动,挪动完毕后在当前位置的下一个位置插入一个数字0,让指针走两步。指向的位置已经超出了数组的范围,如果此时在。所指向的位置即为最后一个待复写的元素,而。当指向的待复写元素是0时,那么此时。

2024-05-15 22:54:05 657

原创 (1)双指针算法介绍与练习:移动零

双指针算法常见于数组和双向链表的题型在数组中,双指针中的指针代表数组元素的下标,而不是真正的指针类型变量在双向链表中,双指针中的指针即为真正意义上的指针,该指针一般是双向链表节点类型的指针对撞指针:从结构的两端开始向中间移动,一般存在两种情况:代表两个指针指向的时同一个位置:代表连个指针已经相遇过一次,相遇的下一次形成交错快慢指针:所谓快慢指针即为一个指针走得快,一个指针走得慢快慢指针一般的思路是:慢指针走一步,快指针走两步。

2024-05-15 19:29:28 587

原创 模拟字符串转整数函数atoi

第 3 步:"1337c0d3"(读入 "1337";第 2 步:"1337c0d3"(当前没有读入字符,因为这里不存在 '-' 或者 '+')第 2 步:"0-1" (当前没有读入字符,因为这里不存在 '-' 或者 '+')第 2 步:"42"(当前没有读入字符,因为这里不存在 '-' 或者 '+')第 1 步:"1337c0d3"(当前没有读入字符,因为没有前导空格)第 1 步:"0-1" (当前没有读入字符,因为没有前导空格)第 1 步:"42"(当前没有读入字符,因为没有前导空格)

2024-05-13 21:01:38 517

原创 C++模版(高阶)

原来的数组是C类型的数组,该数组对越界访问的控制并不严格,甚至有时并不能发现是越界访问,所以针对这个问题,C++11添加了。前面的模版中,使用的都是针对对象类型设计的模版参数,从而便于编译器针对不同类型推演出不同类型的函数或者类。模板特化分为全特化和偏特化,而对于类和函数来说,也分为类模板全特化和偏特化以及函数模板全特化和偏特化。在C++中,除了可以对任意类型使用模板以外,还可以使用模板特化来针对某一种类或者函数提供特殊的模板。所谓全特化,即特化的模板参数类型全部用指定的类型替换普通模板中的类型。

2024-05-04 22:26:01 549

原创 C++中的reverse_iterator迭代器结构设计

前面的list类以及vector类设计了正向迭代器,现在考虑设计反向迭代器,常规的设计思路为单独为反向迭代器建一个新类,这个类中所有的函数全部重新设计,这种思路可取但是并不高效,可以考虑下面的设计思路:前面了解到了容器适配器,那么是否也可以把正向迭代器设置为反向迭代器的容器适配器从而实现反向迭代器的效果对于此时的反向迭代器类设计即为如下:以list类为例首先是对于。

2024-05-04 20:55:01 665

原创 C++中的priority_queue模拟实现

/vector作为默认的容器适配器private:所谓仿函数就是使用类并且重载()运算符,例如对于比较两个数值,小于返回true的仿函数//仿函数class lesspublic:同样地,可以实现一个比较两个数值,大于返回true的仿函数public:所以此时可以使用仿函数修改向上/向下调整算法//向上调整建堆(以大堆为例)//定义仿函数对象,调用对象函数//通过孩子获取父亲elsebreak;//向下调整算法//定义仿函数对象,调用对象函数//获取孩子。

2024-05-03 22:20:55 734

原创 霍纳法则与多项式求值问题

对于多项式的一般式来说:可以简化为下面的等式:上面的等式即为霍尔法则证明如下:使用霍纳法则可以将上面的多项式转化成下面的形式://其中n是多项式的阶数,a[]中存储系数,x是给定值。函数返回多项式f(x)的值i >= 0;此时上面的代码时间复杂度只与多项式的阶数有关,而因为多项式的阶数为N,此时算法的时间复杂度即为O(N)5x%5E54x%5E4x%5EiN%5E2。

2024-05-01 21:39:10 410

原创 中缀表达式转后缀表达式

一个操作符的优先级不是由该操作符本身决定的,而应该是由相邻的操作符彼此直接优先级等级决定的。上面的思路为基本的思路,但是存在一种优化思路,因为不考虑括号时,一共就4个操作符,而这四个操作符只存在。后面的操作符优先级,但是由于此时走到了算式结尾,所以现在可以确定。,但是此时并不能进行计算,需要确定后面紧接的操作符是否比当前的。,当计算时根据从左往右计算的规则,第一个看到的操作符是。号,但是现在也不可以进行计算,因为。优先级高,所以当前元素为。的操作符的优先级是否比。的操作符优先级的确比。

2024-04-28 13:04:31 339

原创 C++中的stack和queue模拟实现

但是,deque有一个致命缺陷:不适合遍历,因为在遍历时,deque的迭代器要频繁的去检测其是否移动到某段小空间的边界,导致效率低下,而序列式场景中,可能需要经常遍历,因此在实际中,需要线性结构时,大多数情况下优先考虑vector和list,deque的应用并不多,而目前能看到的一个应用就是,STL用其作为stack和queue的底层数据结构。与vector比较,deque的优势是:头部插入和删除时,不需要搬移元素,效率特别高,而且在扩容时,也不需要搬移大量的元素,因此其效率是必vector高的。

2024-04-28 09:44:45 753

原创 C++中的STL——queue类的基本使用

队列是一种容器适配器,专门用于在FIFO上下文(先进先出)中操作,其中从容器一端插入元素,另一端提取元素。队列作为容器适配器实现,容器适配器即将特定容器类封装作为其底层容器类,queue提供一组特定的成员函数来访问其元素。元素从队尾入队列,从队头出队列。底层容器可以是标准容器类模板之一,也可以是其他专门设计的容器类。标准容器类deque和list满足了这些要求。默认情况下,如果没有为queue实例化指定容器类,则使用标准容器deque。

2024-04-26 19:34:13 849

原创 正整数的性质:和与根

/ 记录各位之和num /= 10;// 获取下一个高位数值相比较于数字和来说,数字根是数值的每一位相加求和直到和结果为1位数,例如6278的数字根计算方式为6+2+7+8=23->2+3=5,所以6278的数字根为5求一个数值的数字根有两种方法循环求和// 获取最低位和tmp /= 10;tmp = sum;sum = 0;sum = tmp;数学计算(去9法)

2024-04-24 13:43:29 644

原创 C++中的list类模拟实现

但是上面的代码没有通过编译,原因在于模板参数,当模板参数在函数模板或者类模板中,编译器开始编译时,可以实现替换,从而生成对应的函数或者类。,此时实现的效果是,迭代器指向的内容可以修改,但是指向不可以修改,而需要的const迭代器实现的效果是迭代器指向的内容不可以修改,但是指向可以修改,即。函数两个有不同以外,其余均没有不同,而这两个版本中的这两个函数只是返回值类型不同,那么可以考虑通过模板单独控制这两个返回值类型,现在将类型引用。对象的转换问题,为了更方便解决,采取上面的第一种解决方案,如果直接是。

2024-04-23 23:25:03 1382

原创 C++中的STL——stack类的基本使用

stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作。stack是作为容器适配器被实现的,容器适配器即是对特定类封装作为其底层的容器,并提供一组特定的成员函数来访问其元素,将特定类作为其底层的,元素特定容器的尾部(即栈顶)被压入和弹出。stack的底层容器可以是任何标准的容器类模板或者一些其他特定的容器类。

2024-04-22 22:32:25 479

原创 CSS中的圆角和阴影

在 CSS3 中,新增了圆角边框样式,这样我们的盒子就可以变圆角了。(必需值)水平阴影(horizontal shadow),可以为负值。(必需值)水平阴影(horizontal shadow),可以为负值。(必需值)垂直阴影(vertical shadow),可以为负值。(必需值)垂直阴影(vertical shadow),可以为负值。(可选值)将外(盒子的背面)阴影改为内(盒子之上)阴影。CSS3 中新增了盒子阴影,可以使用。属性为盒子添加阴影。(可选值)阴影模糊程度。(可选值)阴影模糊程度。

2024-04-21 10:40:16 1715

原创 CSS中的盒子模型

在网页布局时,主要关注的就是如何利用CSS摆放盒子先准备好相关的网页元素,网页元素基本都是盒子利用 CSS 设置好盒子样式,然后摆放到相应位置往盒子里面装内容。

2024-04-19 22:40:29 1530

原创 CSS的三大特性

标签选择器中设置了字体颜色和字体系列,所以字体颜色会以第二个选择器中的为主,但是字体系列不会被覆盖,因为第一个选择器中没有字体系列属性。当为相同选择器设置相同类型的样式,此时一个样式就会覆盖(层叠)另一个冲突的样式。子标签会继承父标签的某些样式,如文本颜色和字号。恰当地使用继承可以简化代码,可以降低 CSS 样式的复杂性。权重叠加:如果是复合选择器,则会有权重叠加,需要计算权重,计算方式即为对应为相加不进位。对于有多种样式的情况下,则只会覆盖相同的样式,不会影响没有重复的样式,例如下面的代码。

2024-04-19 09:44:21 1219

原创 CSS背景设置

通过 CSS 背景属性,可以给页面元素添加背景样式。背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等。

2024-04-18 20:23:42 809

原创 CSS显示模式

元素显示模式就是元素(标签)以什么方式进行显示,比如自己占一行,比如一行可以放多个。当网页的标签非常多,在不同地方会用到不同类型的标签,了解他们的特点可以更好的布局网页。

2024-04-18 15:26:45 1031

原创 CSS复合选择器

后代选择器又称为包含选择器,可以选择父元素里面子元素。复合选择器是由两个或多个基础选择器,通过不同的方式组合而成的,可以更准确、更高效的选择目标元素(标签)伪类选择器用于向某些选择器添加特殊的效果,比如给链接添加特殊效果,或选择第1个,第n个元素。(逗号可以理解为和的意思)连接而成,任何形式的选择器都可以作为并集选择器的一部分。并集选择器可以选择多组标签, 同时为他们定义相同的样式,通常用于集体声明。不同于后代选择器,子选择器只会选择其直接后代,而不会选择间接的后代。伪类选择器用于选取获得焦点的表单元素。

2024-04-18 10:40:21 1081

原创 Emmet表达式

Emmet语法的前身是Zen coding,它使用缩写,来提高HTML的编写速度,VScode内部已经集成该语法。

2024-04-18 09:04:59 363

原创 CSS文本属性与字体属性

对于占用一整行的标签来说,其区域相当于一个盒子,而文本对齐属性实际改变的是文字在盒子中的位置,但是并不改变盒子本身的大小,对于只占用当前位置的标签来说,居中对齐效果需要。属性时,必须按上面语法格式中的顺序书写,不能更换顺序,并且各个属性间以空格隔开 不需要设置的属性可以省略(浏览器取默认值),但必须保留。) 1 个文字的大小, 如果当前元素没有设置大小,则会按照父元素的 1 个文字大小。在CSS中,一共有100-900九个值,400等同于。一般考虑将粗体改为非粗体,例如将粗体的标题改为非粗体。

2024-04-17 20:19:25 790

原创 CSS简介与CSS选择器

CSS 是层叠样式表 ( Cascading Style Sheets ) 的简称,有时我们也会称之为 CSS 样式表或级联样式表。CSS 是也是一种标记语言,CSS 主要用于设置 HTML 页面中的文本内容(字体、大小、对齐方式等)、图片的外形(宽高、边框样式、边距等)以及版面的布局和外观显示样式。CSS 让我们的网页更加丰富多彩,布局更加灵活自如。简单理解:CSS 可以美化 HTML , 让 HTML 更漂亮, 让页面布局更简单。

2024-04-17 11:13:27 1012

原创 HTML表格标签、列表标签和表单标签

</dl>标签用于定义描述列表(或定义列表),该标签会与<dt></dt>(定义项目/名字)和<dd></dd>(描述每一个项目/名字)一起使用。<dl>-- 列表名称 --><dt></dt>-- 列表描述 --><dd></dd><title>自定义列表</title>列表名称

2024-04-16 19:32:53 617

原创 HTML图片标签和超链接标签

在HTML中,在两个超链接标签中可以使用文本作为显示超链接的载体(即点击文本跳转),也可以使用图片作为超链接的载体(即点击照片跳转),如果不加文本也不加其他内容,则不显示超链接。在HTML中,当图片因某种错误(一般是图片路径出错)导致无法被解析时,可以使用替换文本属性alt用文本代替于错误图片的位置显示在网页上。属性可以指定跳转的形式,包括在当前页面查看超链接和创建新页面查看超链接。在HTML中,当需要修改图片的宽度和高度时,可以使用到。在中,需要为图片添加边框时,可以使用。

2024-04-16 19:26:54 794

原创 HTML中div/span标签、音频标签、视频标签与特殊字符

在 HTML 页面中,一些特殊的符号很难或者不方便直接使用,此时我们就可以使用下面的字符来替代。是没有语义的,可以将两个标签当做两个盒子,里面可以容纳内容。标签用来布局,但是现在一行只能放一个。在HTML中,音频标签有下面的三个属性。标签用来布局,一行上可以多个。注意每一个字符代码末尾都需要分号。在HTML中,可以使用。标签为网页添加音频元素。在HTML中,可以使用。标签为网页添加视频元素。其余字符代码使用类似。

2024-04-16 19:23:58 539 1

原创 HTML段落标签、换行标签、文本格式化标签与水平线标签

在四个格式化标签中虽然每一类的第一个标签和第二个标签实现的效果相同,但是为了更加强调文本效果,提高代码可读性,推荐用第一种标签。在网页中,要把文字有条理地显示出来,就需要将这些文字分段显示。在 HTML 标签中,在HTML中,可以使用下面的标签实现对应的属性,并且这些标签可以嵌套使用。标签用于定义段落,它可以将整个网页分为若干个段落。标签可以在网页上实现水平分割线的效果。注意,水平分割线标签为单标签。为文本分段可以使用段落标签。包裹需要放在一段的文字。标签表示换行,也可以用。在HTML中,常见用。

2024-04-16 19:19:57 490

原创 HTML注释标签与标题标签

如果需要在 HTML 文档中添加一些便于阅读和理解但又不需要显示在页面中的注释文字,就需要使用注释标签。注释不会显示在网页界面上,目的是提高代码的可读性。在浏览器开发工具中查看源代码时可以看到注释,下面是在Edge浏览器中的显示。在浏览器中需要查看代码注释可以使用开发者工具查看源代码看到注释内容。在HTML中有6个标题标签,从h1~h6,数字越大,则字体越小。在HTML中,一个标题标签包裹的内容独占一行。

2024-04-16 19:18:38 131

原创 HTML语言及标签基本介绍

HTML 指的是超文本标记语言 (Hyper Text Markup Language) ,它是用来描述网页的一种语言HTML 不是一种编程语言,而是一种标记语言 (markup language)📌标记语言是一套标记标签 (markup tag)

2024-04-16 19:15:51 233

原创 网页基本结构

网站是指在因特网上根据一定的规则,使用 HTML 等制作的用于展示特定内容相关的网页集合。

2024-04-16 19:14:10 360

原创 C++中的STL——list类的基本使用

list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。list与forward_list非常相似:最主要的不同在于forward_list是单链表,只能朝前迭代,已让其更简单高效。与其他的序列式容器相比(array,vector,deque),list通常在任意位置进行插入、移除元素的执行效率更好。

2024-04-14 13:47:32 825

原创 C++中的vector类模拟实现

涉及到一个赋值运算,而string类本身已经重载过赋值运算符,所以是深拷贝,但是模拟类还没有实现赋值运算符的重载,所以在这里赋值时实际上还是调用的编译器默认的赋值运算符重载函数,依旧是浅拷贝,导致拷贝的结果也就是新对象装着被拷贝对象的旧内容,所以需要实现赋值运算符重载函数。需要注意的是,设计初始化值时,不要直接使用值,而是使用匿名对象调用对应的构造函数,因为vector中存储的数据类型不一定时内置类型,也有可能是自定义类型。有了迭代器区间的构造函数后,使用根据个数的构造函数将会出问题,下面是测试报错信息。

2024-04-09 14:40:51 1028

原创 小小算式(1 + 2) * (3 + 4)背后的大道理

如果有多个操作符,操作符置于第二个操作数的后面,所以常规中缀记法的“3 - 4 + 5”在逆波兰记法中写作“3 4 - 5 + ”:先3减去4,再加上5。在复杂的表达式中,操作符仍然在操作数的前面,但操作数可能是包含操作符的平凡表达式。对于逆波兰表达式一般用栈的数据结构解决,当表达式中的字符为操作数时,操作数入栈,当表达式中的字符为操作符时,依次弹出两个操作数,进行对应操作符的运算。的操作符,它的操作数写法仍然是常规顺序,如,波兰记法“/ 6 3”的逆波兰记法是“6 3 /”而不是“3 6 /”;

2024-04-08 13:52:00 740 2

原创 C++中的STL——vector类的基本使用

vector是表示可变大小数组的序列容器。就像数组一样,vector也采用连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理。本质讲,vector使用动态分配数组来存储它的元素。当新元素插入时候,这个数组需要被重新分配大小为了增加存储空间。其做法是,分配一个新的数组,然后将全部元素移到这个数组。

2024-04-05 23:05:29 785

原创 C++中的string类模拟实现

不论是哪一种情况,先以目标字符串空间为基础开辟新的空间,再将源字符串中的内容直接拷贝到新的空间,这一步可以确保如果空间开辟失败不会影响源字符串中的内容,释放源字符串的空间,接着使源字符串的指针指向新的空间,在设计string类的拷贝构造函数需要考虑到空间开辟的问题,因为是拷贝某一个对象中的内容,所以可以考虑使用该对象的。对于下标引用操作符来说,只需要返回当前下标对应位置的字符即可,但是需要注意的是要判断传入的位置是否合法。对于析构函数来说,只需要释放开辟的空间即可,因为使用的是。

2024-03-31 16:30:46 624

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除