自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(22)
  • 收藏
  • 关注

原创 【Leetcode】857. 雇佣 K 名工人的最低成本

因为从k-1个开始向后遍历,一定可以使得前面k个工人得到薪资一定是大于最低期望薪资,因为是排升序,所以后面人的单个质量薪资是大于前面工人的,所以乘以工作质量所得到的工资一定是超过最低期望薪资的,所以就完美解决了满足条件2的问题。同时基准工资向后走,求出满足条件二的所有基准工资下的总的工资数,找到最小值。2️⃣可以对所有工人的单个质量的工资排升序,工资从下标为k-1的工人开始向后遍历,任意选择前面k个工人(包括本身)。大体方向有了,找基准工资,我们可以把所有人的基准工资求出来,再去一一找k个工人。

2022-09-11 17:43:35 310 3

原创 【Leetcode】152. 乘积最大子数组

请你找出数组中乘积最大的非空连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。题意很好理解,找到乘积最大的非空连续子数组,需要注意的是连续,并且最大,还需要注意的是数组的数据范围是。这是一个动态规划的题目,状态表示比较常规,但是状态计算时有细节需要注意,总体来看这题还是不简单的。如果数组元素都是正数确实可以这样表示,但是存在负数和0的情况,所以这样写是不对的。考虑上负数和0的情况,状态方程也就需要发生改变,状态方程变成了。所以综上来就看,需要维护两个值,一个最大值,一个最小值。

2022-09-09 10:51:38 822

原创 【Leetcode】667. 优美的排列 II

在构建的过程中,可以发现构建出来的序列就是1到k + 1组成,但是最后一位并不确定,而后面加入的升序序列就是k + 2到n。现在知道的是后面序列的第一位是k+ 2, 但是前面序列的最后一位并不知道,他们两个的差值的绝对值会不会超过k呢?本题的题意还是比较容易理解的,我们需要构建一个这样的序列,保证所构成的序列中相邻元素的差的绝对值只有k种选择。,就可以保证序列中相邻元素的差值都是1到k。证明发现,前后两个序列的两个数值差是一定小于等于k的,所以这种构建方法是合理的。,请你构造一个答案列表。

2022-09-08 17:50:21 942

原创 【Leetcode】1592. 重新排列单词间的空格

可能难点在于不知道如何取出所有的单词,需要你了解stringstream的用法。如果不了解stringstream,可以看看这篇文章。,该字符串由若干被空格包围的单词组成。每个单词由一个或者多个小写英文字母组成,并且两个单词之间至少存在一个空格。这题的思路还是比较简单的,重新排列空格,使每个单词之间的空格数目相同且最大,请你重新排列空格,使每对相邻单词之间的空格数目都。如果不能重新平均分配所有空格,请。,这也意味着返回的字符串应当与原。本题大致可以分为三步来做。

2022-09-07 12:07:53 141 1

原创 【leetcode】828. 统计子串中的唯一字符

此时统计的字符子串是"A", 继续向后寻找下一个’A’,在寻找的过程中,会扫描到’B’, ‘C’,‘D’,可以与’A’构成"AB", “ABC”,“ABCD”,所以在向后寻找的过程中,上面的操作完成了一个字符的统计,一共可能存在26个字符,循环查找统计就可以求出所有子串的单个字符数量。例如走到’E’,新增加的包含第二个’A’的子串为"BCDAE",“CDAE”,“DAE”,“AE”。2️⃣继续寻找’A’,第二个’A’的下标为4,然后更新l,r。循环执行,向后走一步,新子串的数量就增加。

2022-09-06 23:04:17 233

原创 详解红黑树,图文并茂

树中每个节点的包含五个属性:color,left,right,parent和data。这里的left,right和parent都是节点类型的指针,构成的三叉链结构。和AVL树是一样的。如果一个节点没有子节点或者父节点,则该节点相应属性的值为NIL。我们把这些NIL视为指向二叉搜索树的叶节点的指针(外部节点),而把带关键字的节点视为树的内部节点。这个NIL在我们下面的讲述中没有多大作用,简单了解就行。红黑树是每个节点都带有颜色属性的二叉查找树,颜色为红色或黑色。节点是红色或黑色。根节点是黑色。

2022-08-22 19:43:40 2357 11

原创 详解AVL树,图文并茂

如果搜索树的高度总是O(logN)O(log_N)O(logN​),我们就能保证查找、插入和删除的时间为O(logN)O(log_N)O(logN​),最坏情况下的高度为O(logN)O(log_N)O(logN​)的树称为平衡树。比较流行的一种平衡树是AVL树,AVL树得名于它的发明者和。还有一种比较出名的平衡树叫红黑树,map和set的底层实现就是红黑树,后面会出一篇博客专门讲红黑树。.........

2022-08-18 21:48:27 957 17

原创 详解二叉搜索树的增删改查

二叉查找树(英语:Binary Search Tree),也称为二叉搜索树、有序二叉树(ordered binary tree)或排序二叉树(sorted binary tree),是指一棵空树或者具有下列性质的二叉树:二叉查找树相比于其他数据结构的优势在于查找、插入的时间复杂度较低。为。二叉查找树是基础性数据结构,用于构建更为抽象的数据结构,如集合、多重集、关联数组等。2.1 搜索树的节点二叉搜索树节点通常采用的是二叉链结构,就是一个指针指向左孩子一个指针指向右孩子。2.2 构建树的结构三、二叉搜索

2022-08-15 11:34:57 819 11

原创 万字长文带你了解多态的底层原理,这一篇就够了

多态是在不同继承关系的类对象,去调用同一函数,产生了不同的行为。比如Student继承了Person。Person对象买票全价,Student对象买票半价重载两个函数在同一作用域。函数名相同、参数(个数/类型/顺序)不同。覆盖(重写)两个函数分别在基类和派生类的作用域。两个函数必须是虚函数。函数返回值、函数名、参数列表都必须相同(协变例外,返回值可以不同)。隐藏(重定义)两个函数分别在基类和派生类的作用域。函数名相同。...

2022-08-10 09:44:51 840 9

原创 C++中的继承原理,快来看看你有没有什么遗漏

继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。继承也是一种复用,以前我们接触的复用都是函数复用,继承是类设计层次的复用。1.2 继承的定义继承的格式继承关系和访问限定符继承基类成员后的访问方式在继承后,父类成员继承到子类中,必然也需要有访问限定符,而访问限定符的变化们就是由在父类时的类型和继承方式决定。三、继

2022-08-03 21:30:56 833 5

原创 C++动态内存管理

C/C++ 的内存管理跟 JAVA 这些语言是不同的 —— JAVA 的程序不是直接跑在操作系统上的,JAVA 是在 JVM 虚拟机上运行。C/C++ 的程序是直接跑在 OS 上的,这也是为什么我们学习 C/C++ 要学习内存管理的原因,所以 C/C++ 的学习者需要对系统了解的更深。内核空间: 放置操作系统相关的代码和数据。(用户不能直接进行操作 ------ 可以通过调用系统提供的 api 函数)。栈:又叫堆栈,非静态局部变量/函数参数/返回值等等,栈是向下增长的 。内存映射段是高效的I/O映

2022-06-27 16:05:15 179 3

原创 类和对象(三)

C++为了增强代码的可读性引入了运算符重载,运算符重载是具有特殊函数名的函数,也具有其返回值类型,函数名字以及参数列表,其返回值类型和参数列表与普通的函数类似。注意:为什么要进行运算符重载?运算符都是默认给内置变量类型用的,自定义类型想要使用就需要进行运算符重载。运算符重载的意思就是我们去写一个函数定义这里运算符行为。重载日期类的和运算符。赋值运算符(=)重载赋值运算符重载需要注意:const成员函数将const修饰的类成员函数称之为const成员函数,const修饰类成员函数,实际修饰该成员函

2022-06-18 09:00:00 143

原创 类和对象(二)

如果一个类中什么成员都没有,简称为空类。空类中什么都没有吗?并不是的,任何一个类在我们不写的情况下,都会自动生成下面6个默认成员函数 。构造函数完成的是初始化工作,析构函数完成的是清理工作,拷贝构造就是拷贝,赋值重载也是拷贝,但是使用场景不一样,最后的取地址重载用的很少。构造函数是一个特殊的成员函数,名字与类名相同,创建类类型对象时由编译器自动调用,保证每个数据成员都有 一个合适的初始值,并且在对象的生命周期内只调用一次。构造函数是特殊的成员函数,需要注意的是,构造函数的虽然名称叫构造,但是需要注意的是

2022-06-12 19:45:33 118

原创 类和对象(一)

c语言是面向过程的语言,关注的是过程,分析出求解问题的步骤,通过函数调用来逐步解决问题。而c++是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互来解决问题。在c++中就已经有类的雏形,就是结构体struct。在c语言中可以通过struct将很多变量放在同一个struct类型的变量中,在处理复杂问题时使用很方便,但是缺点就是不能定义函数,只可以定义变量。在c++中就引入类这个东西,类中既可以定义变量,也可以定义函数。但是在c++中,更喜欢用class来定义类。struct和cla

2022-06-01 10:12:43 104

原创 (Heap Sort)堆排序超详解,我不信你还不会(c语言代码实现)

文章目录堆的基本介绍堆排序的实现建堆(向下调整算法)排序的实现堆排序完整代码建堆的时间复杂度分析堆的基本介绍堆(Heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵完全二叉树的数组对象。把它的所有元素按照完全二叉树的顺序存储方式存储在一个一维数组中,并满足任意一个父亲节点的值一定小于等于(大于等于)孩子节点的值。堆的两条性质:堆中某个节点的值总是不大于或不小于其父节点的值堆总是一棵完全二叉树。堆的分类:小根堆(小堆): 根节点最小的堆大根堆(大堆): .

2021-09-08 20:16:16 744 6

原创 轻松搞定单链表(c语言)

文章目录前言链表项目分配单链表节点的定义打印链表链表的销毁创建新节点(增容函数)尾插头插尾删头删查找指定节点前插入新节点指定节点后插入新节点删除指定节点删除指定节点的后一个节点链表长度判断链表是否为空结语SList.hSList.c前言上次更完顺序表的oj题后,也就代表着顺序表的结束,所以今天开始了链表的学习。链表链表和顺序表都是属于线性表的,那引入链表的意义在哪里呢?这里其实我们可以回顾一下顺序表的实现过程,链接c语言实现顺序表我们会发现顺序表有个很严重的缺点,就是它的size一般..

2021-08-20 10:19:49 115 4

原创 几道简单难度的顺序表力扣oj题

文章目录前言1.移除元素2.删除有序数组中的重复项3.合并两个有序数组结语前言上次发布了一篇讲解顺序表的博客,博客链接c语言实现顺序表(初阶数据结构)最后答应大家的oj题讲解来了。题目都是力扣上的,这个网站想必大家都有所了解,是一个很优秀的刷题网站,刷题可以帮我们巩固知识,是非常有必要的。题目不多,只有三题。第一题详细说,让大家知道算法题的思路分析和做法。网站链接力扣1.移除元素题目链接移除元素函数接口:nums为数组首地址,numsSize为原数组长度,val为指定的删除的值,.

2021-08-15 18:58:38 271 11

原创 c语言实现顺序表(初阶数据结构)

文章目录前言前言这是小编第一篇数据结构的文章,从今天开始更新数据结构相关的博客,希望大家多多关注,一起学习。今天小编主要说的是顺序表的相关内容

2021-08-14 19:47:53 1010 13

原创 算法复杂度分析

文章目录如何衡量一个算法的好坏复杂度的概念时间复杂度的定义空间复杂度的定义大O的渐进表示法具体实例来用大O的表示法来表示复杂度常见复杂度的对比在刚开始学习数据结构时,我们最先接触的就是复杂度,在一些oj题中也会有对时间复杂度和空间复杂度的要求,所以对复杂度的了解和计算是非常有必要的。如何衡量一个算法的好坏首先,这个算法必须是正确的其次,好的算法应该是友好的,便于人们理解和交流,并且是机器可执行的。这个算法还需要足够健壮,即当输入的数据非法或不合理时,也能适当的做出正确的反应或进行相应的处理最后.

2021-07-30 16:38:45 525

原创 文件操作(c语言进阶)

文章目录为什么使用文件什么是文件文件的打开和关闭文件的顺序读写fgetcfputcfgetsfputsfscanffprintffreadfwritescanf/fscanf/sscanf printf/fprintf/sprintf 三者的区别文件的随机读写fseekftellrwind文本文件和二进制文件文件缓冲区小结为什么使用文件我们之前在写程序时,会发现在每次程序结束后,需要再次输入数据时,之前的数据就会被清空,不能有效的保存数据。而在做一些小项目,例如通讯录,高校空教室管理时,保存数据..

2021-07-24 11:00:07 194 2

原创 深度剖析数据在内存中的存储(c语言进阶)

文章目录数据类型的详细介绍整型家族浮点型家族构造类型指针类型整型在内存中的存储(重点)大小端字节序介绍及判断整型存储练习char类型取值范围的讨论浮点型在内存中的存储(重难点)结尾数据类型的详细介绍整型家族signed表示有符号类型,unsigned表示无符号类型charsigned charunsigned charshortsigned shortunsigned shortintsigned intunsigned intlongsigned long

2021-07-22 23:31:59 165

原创 汉诺塔——经典递归问题(c语言实现)

汉诺塔——经典递归问题(c语言实现)问题背景汉诺塔问题是一个经典的问题。汉诺塔(Hanoi Tower),又称河内塔,源于印度一个古老传说。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,任何时候,在小圆盘上都不能放大圆盘,且在三根柱子之间一次只能移动一个圆盘。问应该如何操作?问题分析思路:1.使用的语言:C语言2.使用的编译器:vs20193.参考书籍:谭浩强第四版4

2021-04-04 17:36:08 78543 26

空空如也

空空如也

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

TA关注的人

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