自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 穷举vs暴搜vs深搜vs回溯vs剪枝

当i == 0 (i为下标)时候它下面的递归有i == 1, i == 2,即最左侧的那种情况,接着因为在第二层的时候k会不断累加,所以只有i == 0和i == i的情况。函数体关注某个节点在干什么。这个方法是比较传统的方法,从前往后的每个数都分选和不选,在叶子节点的时候加入ret,递归出口就是i == nums.size()。如果选,dfs后要恢复,如果不选则不需要。首先我们要解决的问题是怎样把每层不需要的数,如第二层第一个中的1,以及这棵树中下一层的1.2,我们可以用一个bool数组来解决。

2024-11-19 22:13:29 334

原创 二叉树的深搜(6题)

由题意我们知道,一开始要找到最小的那个数必须不断进入左子树寻找,然后再看本节点,那么本质上就是一个中序遍历,中序遍历每找到一个值就把count--。这题我们主要是要意识到回溯里面的“恢复路径”,path即为路径,但是这题里面将path作为全局变量并不合适,当返回上一层的时候必须尾删,频繁的增删会使代码变得复杂。我们以一个节点为例,如果这个节点不为空,第一步我们先求出这个节点的值并更新,然后查看它是否有左右子节点,如果都没有那就直接返回更新后的prenum。出口是当root为空的时候。

2024-11-19 15:47:45 543

原创 递归(6题)

如果我们一开始直接反转第一第二个链表的话,就会找不到第三个链表,因此我们使用reverseList函数来反转后面的链表,我不关心你是怎么样实现的,但是我相信你能把链表逆置后再把新的头节点返回给我。这道题目较为容易,我们要两两交换,只需要考虑一次两两交换节点即可,交换之后将第二个节点与后面的节点相连,我相信我这个函数可以帮我做到将后面的节点两两交换,最后用一个变量接收返回值。如果l1的节点数值更小,那么把l1连到tail后面,且此时l1变为新的tail,l1的next变为新的l1,l2不变。

2024-11-14 18:39:35 638

原创 Linux基础IO

w Truncate(缩短) file to zero length or create text file for writing.1.进程也有进程的当前路径cwd,该进程建立的文件会建在该进程的当前路径,当我们更改了当前进程从cwd,就可以把文件新建到其它目录下了。2.w,写入之前都会对文件进行清空处理3.w/a都是写入,而和w不同的是,a是追加写。pathname: 要打开或创建的目标文件。

2024-10-23 22:29:32 1034

原创 Linux shell的简单实现

【代码】Linux shell的简单实现。

2024-10-20 22:07:46 105

原创 Linux进程替换

用fork创建子进程后执行的是和父进程相同的程序(但有可能执行不同的代码分支),子进程往往要调用一种exec函数以执行另一个程序。当进程调用一种exec函数时,该进程的用户空间代码和数据完全被新程序替换,从新程序的启动例程开始执行。调用exec并不创建新进程,所以调用exec前后该进程的id并未改变。我们可以先复习一下进程地址空间的相关知识cpu执行进程时,会通过页表映射到其代码和数据当我们进行进程替换时,即使用替换函数执行ls时,ls会。

2024-10-17 09:31:22 521

原创 MySQL用户管理

如果我们只能使用root用户,这样存在安全隐患。这时,就需要使用MySQL的用户管理。

2024-10-13 00:43:57 433

原创 MySQL视图

视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。视图的数据变化会影响到基表,基表的数据变化也会影响到视图。

2024-10-13 00:17:50 230

原创 MySQL事务管理

事务就是一组DML语句组成,这些语句在逻辑上存在相关性,这一组DML语句要么全部成功,要么全部失败,是一个整体。MySQL提供一种机制,保证我们达到这样的效果。事务还规定不同的客户端看到的数据是不相同的。事务就是要做的或所做的事情,主要用于处理操作量大,复杂度高的数据。

2024-10-12 00:56:44 1009

原创 MySQL索引

如何理解硬盘如何理解柱面,磁道,扇区,磁头InnoDB 主键索引和普通索引MyISAM 主键索引和普通索引其他数据结构为何不能作为索引结构,尤其是B+和B聚簇索引 VS 非聚簇索引。

2024-10-10 00:07:19 1301

原创 MySQL表的内连和外连

表的连接分为内连和外连。

2024-10-06 17:20:41 189

原创 MySQL复合查询

多行子查询是指返回单列多行数据,都是针对单列而言的,而多列子查询则是指查询返回多个列数据的子查询语句。显示工资比部门30的任意(随意一个)员工的工资高的员工的姓名、工资和部门号(包含自己部门的员工)显示雇员名、雇员工资以及所在部门的名字因为上面的数据来自EMP和DEPT表,因此要联合查询。查询和10号部门的工作岗位相同的雇员的名字,岗位,工资,部门号,但是不包含10自己的。显示工资比部门30的所有员工的工资高的员工的姓名、工资和部门号。查找每个部门工资最高的人的姓名、工资、部门、最高工资。

2024-10-06 11:14:05 706

原创 MySQL内置函数

如果是多字节字符则计算多个字节数;比如:字母,数组算作一个字节,中文表示多个字节数(与字符集编码有关)要求显示student表中的信息,显示格式:“XXX的语文是XXX分,数学XXX分,英语XXX分”ifnull(val1, val2) 如果val1为null,返回val2,否则返回val1的值。md5(str)对一个字符串进行md5摘要,摘要后得到一个32位字符串。显示所有留言信息,发布日期只显示日期,不用显示时间。这里的时间戳并不是一串数字,而是日期与时间都显示。以首字母小写的方式显示所有员工的姓名。

2024-10-05 21:39:24 570

原创 MySQL表的增删改查

CRUD : Create(创建), Retrieve(读取),Update(更新),Delete(删除)

2024-10-03 13:23:34 1247

原创 MySQL:表的约束

真正约束字段的是数据类型,但是数据类型约束很单一,需要有一些额外的约束,更好的保证数据的合法性,从业务逻辑角度保证数据的正确性。比如有一个字段是email,要求是唯一的。表的约束很多,这里主要介绍如下几个: null/not null,default, comment, zerofill,primary key,

2024-09-24 22:09:53 1131

原创 C++中的多态

多态是在不同继承关系的类对象,去调用同一函数,产生了不同的行为。比如Student继承了Person。Person对象买票全价,Student对象买票半价。那么在继承中要构成多态还有两个条件1. 必须通过基类的指针或者引用调用虚函数2.被调用的函数必须是虚函数,且派生类必须对基类的虚函数进行重写普通的函数调用,调用函数的类型是谁,就调这个类型的函数看这一个函数,里面调用的就是Person这个类里面的函数。

2024-09-21 01:45:55 710

原创 C++中的继承

继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继承是类设计层次的复用。public:protected:// 姓名// 年龄// 继承后父类的Person的成员(成员函数+成员变量)都会变成子类的一部分。这里体现出了。

2024-09-18 21:49:43 1372

原创 堆排序,快速排序

如果遇到比key大的值,就会拉开差距,此时如果cur遇到比key小的值,这个值就会和一个比key大的值交换,因为prev和cur原本中间隔着的都是大于key的值,++prev后再交换就会是这样的结果。情况3,left与right先各自移动并且交换一次,然后right再移动和left相遇,此时因为已经交换过,a【left】处储存的值小于a【keyi】因此也符合。3.重复以上操作,直到left==right,然后把key值填入这个坑中,此时这个位置一定是坑,因为left和right永远有一个是坑。

2024-09-16 01:51:06 912

原创 MySQL数据类型

当我们的表的编码是utf8时,varchar(n)的参数n最大值是65532/3=21844[因为utf中,一个字符占用3个字节],如果编码是gbk,varchar(n)的参数n最大是65532/2=32766(因为gbk中,一个字符占用2字节)。(0为假,非0为真)实际存储的是“数字”,因为这些选项的每个选项值依次对应如下数字:1,2,4,8,16,32,.... 最多64个。有一个调查表votes,需要调查人的喜好, 比如(登山,游泳,篮球,武术)中去选择(可以多选),(男,女)[单选]

2024-09-15 16:08:44 1139

原创 链表(4题)

1.画图,直观形象,便于我们理解2.引入虚拟“头”节点便于处理边界情况方便我们对链表操作3.不要吝啬空间,大胆定义变量比如prev cur next,定义好之后把相应节点的指针存进去,然后就可以不用考虑前后顺序,不用担心找不到节点了4.快慢双指针判环,找链表中环的入口,找链表中倒数第n个节点。

2024-09-13 23:47:50 398

原创 数据库与表的操作

在项目实际开发中,经常修改某个表的结构,比如字段名字,字段大小,字段类型,表的字符集类型,表的存储引擎等等。我们还有需求,添加字段,删除字段等等。这时,可以打开看看 mytest.sql 文件里的内容,其实把我们整个创建数据库,建表,导入数据的语句都装载这个文件中。如果备份一个数据库时,没有带上-B参数, 在恢复数据库时,需要先创建空数据库,然后使用数据库,再使用source来还原。2.数据库校验集 - 支持数据库,进行字段比较使用的编码,本质也是一种读取数据库中数据的采用的编码格式。

2024-09-13 20:13:35 1549

原创 数据库基础

存储数据用文件就可以了,为什么还要弄个数据库?文件保存数据有以下几个缺点:文件的安全性问题文件不利于数据查询和管理文件不利于存储海量数据文件在程序中控制不方便数据库存储介质:磁盘内存为了解决上述问题,专家们设计出更加利于管理数据的东西——数据库,它能更有效的管理数据。数据库的水平是衡量一个程序员水平的重要指标。

2024-09-11 18:29:25 940

原创 插入、希尔、冒泡、选择排序

当gap为一个很大的值时,例如n/3,就有n/3组,按照每组元素个数相等,每组最坏的情况下,要进行1+2+3次置换,那么时间复杂度约为2N,即O(n)的时间复杂度。当gap为1时候,最坏情况下,时间复杂度理论上为1+2+3+4+....+n-1,但是因为已经进行过预排序,所以整个数组几乎是有序的,时间复杂度也是O(n)层次。从第一个元素开始,将这个元素和后面的元素比较,若更大,交换两个元素,一直到末尾,这样一次排序后最后一个元素必定为最大元素。1.预排序,间隔gap的个元素分为一组,一共gap组。

2024-09-07 23:54:40 562

原创 哈希表(5题)

把异位词字符串排好序之后都是一样的,所以我们把排完以后相同的字符串作为标志,把这些字符串一个个填进去。我们只需要一边判定一边把数组中的内容往里面塞即可。思路同1,一边判断一边把数塞进去。

2024-09-04 20:58:23 326

原创 字符串(4题)

然后创建一个整型数组,我们所需数组长度为两个字符串长度之和-1,两个数不同位上相乘的结果可以存在这两个数下标之和对应的数组位置。最后我们处理前导0,由于我们先逆置过了,因此字符串ret末尾的位置是高位,将0去除即可,最后逆置回来。我们将乘出来每一位的数值先保留,等到结束后再相加。这题我们使用无进位相加的方法。先将字符串逆置,方便处理。

2024-09-04 18:39:48 330

原创 模板的进阶

上述示例中,p1指向的d1显然小于p2指向的d2对象,但是Less内部并没有比较p1和p2指向的对象内容,而。通常情况下,使用模板可以实现一些与类型无关的代码,但对于一些特殊类型的可能会得到一些错误的结果,需要特殊处理,比如:实现了一个专门用来进行小于比较的函数模板。该种实现简单明了,代码的可读性高,容易书写,因为对于一些参数类型复杂的函数模板,特化时特别给出,因此函数模板不建议特化。非类型形参,就是用一个常量作为类(函数)模板的一个参数,在类(函数)模板中可将该参数当成常量来使用。

2024-08-28 16:47:19 750

原创 List简介

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

2024-08-21 20:55:41 940

原创 网络基础(一)

局域网中,每一台主机都能收到其它任何主机发出的报文,但是在识别不是发给自己的时候,直接进行了丢弃,这一过程利用了MAC地址的唯一性。同样的场景,教室原本十分吵闹,但是当老师喊张三回答问题时,同学们都识别了此次喊话,便停止了自己的吵闹。"局域网" 和 "广域网" 只是一个相对的概念,为了便于划分,我们可以狭义的将一个家庭,一个学校机房中的计算机看成一个局域网。任何一台主机,在任何时刻,都可以随时向局域网发消息,所以数据会发生碰撞,数据的碰撞会导致要接受数据的主机无法准确的接受对方的消息。

2024-08-20 20:21:34 632

原创 Vector实现

0.熟悉他的功能1.不要每一行读懂了再看下一行,这样读代码会很困难.2.先拉框架,不要先抠细节3.理解的时候连蒙带猜,再验证猜测类:成员变量+成员函数。

2024-08-15 00:07:20 332

原创 string的模拟实现

【代码】string的模拟实现。

2024-08-13 21:56:39 232

原创 模拟(5题)

当我们遇到r,o,a,k时,要去查询前一个字母是否有青蛙已经叫了,如果有,将前一个字母对应的值减一,将这个字母对应的值加一,如果没有,那么这个字符串即为非法。题目要求最少,那么我们在记录c时,应该先查看k字母对应的值,如果大于零,说明已经有青蛙叫完一次了,那么我们将k对应的值减一,然后再将c对应的值加一。最后值得注意的是,若numRows为1,循环会陷入死循环,因此我们先要判读一下这种情况。由图我们可以得出,第一行和最后一行的规律相同,中间的几行的规律相同,根据题意,我们从c开始记录青蛙的叫声。

2024-08-13 19:52:50 503

原创 二分查找(8题)

- 力扣(LeetCode)public:left = 0;首先先判断空数组的情况数组可以被分成两个区块,这里我们以寻找左端点为例子。数组被分成小于target和大于等于target。当某一个位置小于target时,这段是必定不可能出现左端点的,因此我们left更新时使用left= mid+1来跳出这个位置。而当这个位置大于等于target时,有可能这个位置就是左端点,right更新时使用right = mid来保留这一位置。

2024-08-10 15:34:43 885

原创 前缀和(6题)

我们每遍历到一个前缀和sum的时候,只需要加上已经在hash中存储的,即i位置之前的前缀和中,是否有值为sum-k,加上即可,然后再加上本次增添的前缀和。g[i]为后缀积,表示从 size-1 到i+1位置的数组元素和,递推公式为·g[i] = g[i+1] * nums[i+1];f[i]为前缀积,表示从0到i-1位置的数组元素积,递推公式为 f[i] = f[i-1]*nums[i-1];f[i]为前缀和,表示从0到i位置的数组元素和,递推公式为 f[i] = f[i-1]+nums[i];

2024-08-05 22:55:46 970

原创 位运算(10题)

结果为 0 1 1 0 1 1,无进位相加就是1 + 0 = 0,1+1 = 0,但是不会向高位进位。例如 1 0 1 1 0 1 ^分别用 &1 来判断两个数最低位是0还是1,对两个数进行比较,然后分别不断右移这两个数。我们先将所有值异或,这个过程会将相同的数都消去,最后得到两个不同的数a,b异或的结果。将要判断的数每次按位与1,若为1则此位为1,然后再右移一位。我们规定从右往左,的位数为第0,1,2,3,4,5.....31位。a,b两个数中,一个数的该位置为1,一个数为0.

2024-08-02 23:55:27 806

原创 程序环境和预处理

_FILE__ //进行编译的源文件__LINE__ //文件当前的行号__DATE__ //文件被编译的日期__TIME__ //文件被编译的时间__STDC__ //如果编译器遵循ANSI C,其值为1,否则未定义这些预定义符号都是语言内置的。可以用printf输出,类型要对应上,例如语法:例子#define reg register //为 register这个关键字,创建一个简短的名字;) //用更形象的符号来替换一种实现case //在写case语句的时候自动把 break写上。

2024-07-29 23:57:34 685

原创 滑动窗口(8题)

当left到right这段的子数组之和大于等于目标数时,再向后移动时,子数组的长度会更长,因此我们通过将left右移,判断能否减去一些较小的数,使范围内的子数组长度减小,但是仍然大于目标数。我们让left和right从下标为0处出发,让right不断右移,一直让left到right这段的子数组之和大于等于目标数。但也有可能,整个数组加起来都达不到目标数的大小,我们可以事先遍历判断,也可以判断ret是否被赋值过,来进行返回。比如 1 2 3 4 50 ,目标数为40.如例子 2 3 1 2 4 3。

2024-07-24 20:37:31 436

原创 双指针(7题)

我们可以在图中看到,这个过程就是以一个值为起点,向后或者向下进行比较的结果,(最大的组合加粗)但是它只能保证这次比较的结果中它是最大,所以还需要和它之前的小组中最大值值进行比较。因为开始的时候startpos为0,endpos为-1,因此遍历结束时,startpos指向的是真正开始遍历的位置的下标+1.因此startpos--;因为有可能出现最后一位的值为0,但是所剩余的空格只有1,endpos+2后会出现越界,因此我们要进行判断,如果越界那么我们先进行处理。判断函数(i, j,k)

2024-07-22 23:32:05 796

原创 c++模板初识

class 类模板名// 类内成员定义/ 动态顺序表// 注意:Vector不是具体的类,是编译器根据被实例化的类型生成具体类的模具public :, _size(0){}// 使用析构函数演示:在类中声明,在类外定义。~Vector();// 注意:类模板中函数放在类外进行定义时,需要加模板参数列表if(_pData)

2024-07-20 12:32:44 693 3

原创 C/C++内存管理

但是new和delete最重要的功能还是用来处理自定义类型,malloc无法很好支持动态申请的自定义对象的初始化class Apublic:: _a(a)_a = a;int main()//自定义类型,开空间+调用构造函数初始化//自定义类型,调用析构函数+释放空间delete p2;delete p3;//也支持一次定义多个对象//多个对象的初始化1. A a1(1);A a2(2);2. //使用匿名对象。

2024-07-20 10:10:05 648

原创 类和对象(下)

目录一、再谈构造1.初始化列表2.c++11中,可以在声明的时候给缺省值3.构造的优化现象4.c++11支持多参数的隐式类型转换5.explicit可以禁止隐式类型转换6.匿名对象二、static成员三、四、友元1.友元函数2.友元类五、内部类一、再谈构造1.初始化列表初始化列表:以一个冒号开始,接着是一个以逗号分隔的数据成员列表,每个"成员变量"后面跟一个放在括号中的初始值或表达式。class Date{

2024-07-19 09:28:46 870

空空如也

空空如也

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

TA关注的人

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