- 博客(27)
- 收藏
- 关注
原创 [数据结构]树和二叉树
树基本定义n个结点的最小无环图根结点没有前驱,其他结点有且仅有一个前驱一个结点的子结点个数称为该结点的度,树中结点的最大度称为树的度度大于0的结点称为分支结点,度为0的结点称为叶子结点(终端结点)结点的层次从树根开始定义(根结点为第一层),深度从根结点自顶向下累加,高度从叶结点自底向上累加路径是两结点之间经过的结点序列,路径长度是路径上经过的边的个数树的性质树中结点数=结点度数和+1度为m的树中第i层上至多有m^{i-1}个结点(i >= 1)高度为h的m叉树至多有 (m^h
2021-09-01 16:31:49
106
原创 【菜鸡的力扣笔记】面试题10.02.变位词组
题干编写一种方法,对字符串数组进行排序,将所有变位词组合在一起。变位词是指字母相同,但排列不同的字符串。思路首先想到的是从每个字符串生成一个标志用于分类和比较,对于一个纯小写字母的字符串而言有两种可行的方案:可以对不同字母赋予不同值然后求和,用字母权值和标识字符串按字母表顺序对字符串进行排序,用有序的字符串作为标识代码//权值和解法vector<vector<string>> groupAnagrams(vector<string>& strs
2021-07-18 10:03:45
174
原创 设计模式——行为型
行为模式研究的是类或对象之间的合作和任务分工,描述的是对象间的交互,是不同对象之间划分责任和算法的抽象化。重点关注它们之间的交互和通信。行为模式更加清晰地划分类与对象的职责,并研究系统在运行时实例对象之间的交互。模板方法(template method)在基类中确定算法结构,在子类中实现可变化的部分,具有统一的操作步骤或操作过程,有不同的操作细节。使用继承计指使得父类和子类之间达到分工合作的目的。提取了子类的公共行为,高度的复用性,符合依赖倒置原则命令模式(command)把一个“命令”封装在一个
2020-11-10 15:13:16
148
原创 设计模式——创建型
创建型模式把创建对象隐藏在一个操作或者类中,抽象了实例化的过程,可以使系统和它的对象之间互不依赖,符合单一职责原则。封装系统使用的具体类的信息,隐藏了类实例的创建和组织过程。简单工厂模式又称静态工厂方法模式,专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。可以根据参数的不同返回不同类的实例。对象的创建和本身的业务处理分离,降低系统的耦合度,工厂方法是静态方法,使用方便,工厂类的职责相对过重,增加子类时需要相应地修改工厂方法。适用于工厂类创建对象较少的情形。工厂模式增加了工厂
2020-11-10 15:09:51
106
原创 设计模式——结构型
结构模式研究类和对象之间的组织结构与关系。基于类的结构模式通过在对象的类之间建立静态的继承关系而得到一个结构(基于类的适配器模式),一般只存在继承关系;基于对象的结构模式关心类与对象的组合,通过关联关系在一个类中定义另一个类的实例对象,然后通过该对象调用其方法(绝大多数的结构模式),多用关联关系替代继承关系。代理模式(Proxy)为其他对象提供一种代理以控制对该对象的访问装饰模式(Decorator)动态地给一个对象添加一些额外的职责,就 增加功能来说,装饰模式比生成子类更为灵活适配器模式(Adapt
2020-11-08 21:02:54
101
原创 【软件架构与模式】面向对象设计原则
单一职责原则(SRP)每个类只包含一个职责,所有方法都应该为了实现该职责。SRP分析:someone + verb + itself 成立开闭原则(OCP)对扩展开放,对修改封闭,是面向对象设计的核心,提高了可重用性和可维护性。Liskov替换原则(LSP)使用多态对象的规范化:派生类中覆写的方法必须遵守与其他使用这个派生类的类之间的契约,即不能违反基类中这个方法的前置条件、后置条件和类不变式。里氏代换原则的目的是使程序中任何位置的基类都可被其派生出的子类替代。可以粗浅的理解为基类中有的属性和
2020-11-01 14:55:27
170
原创 【菜鸡的力扣笔记】201.数字范围按位与
这题常规做法耗时太长,于是考虑找规律,时间有点紧张(主要还是懒),直接看了题解。关键点在于结果是所有数字二进制的公共前缀补上对应位数的0。代码就不放了,一个新知识点:java里a /= 2 和 a >>= 1是等价的(在其他语言中应当也是如此)。除法在实际计算是会转化为移位运算,二者只是写法上的区别,在执行方式和运算效率上是相当的。!下图红框是移位运算符的执行效率,最上面是除法的执行效率,区别可以忽略。...
2020-08-23 21:22:09
100
原创 【菜鸡的力扣笔记】696.计数二进制子串
题目描述给定一个字符串 s,计算具有相同数量0和1的非空(连续)子字符串的数量,并且这些子字符串中的所有0和所有1都是组合在一起的。重复出现的子串要计算它们出现的次数。示例输入: “00110011”输出: 6解释: 有6个子串具有相同数量的连续1和0:“0011”,“01”,“1100”,“10”,“0011” 和 “01”。请注意,一些重复出现的子串要计算它们出现的次数。另外,“00110011”不是有效的子串,因为所有的0(和1)没有组合在一起。思路计算交替出现“0”和“1”的次数
2020-08-10 15:45:42
102
原创 力扣刷题 994.腐烂的橘子
994.腐烂的橘子思路是多源广度优先搜索。我的做法是用一个队列(rotted)来记录腐烂的橘子的位置,已经入队的橘子的位置保存这个橘子所在的层数。int orangesRotting(vector<vector<int>>& grid) { int wid = grid.size(); int len = grid[0].size...
2020-08-07 20:56:17
184
转载 PriorityQueue
https://baijiahao.baidu.com/s?id=1665383380422326763&wfr=spider&for=pc
2020-07-02 21:40:21
96
原创 汇编语言实验-地址表和移位 以及关于db伪指令的一些内容
题目如下:BL中的只有一位为0,编写程序测试0所在的位数,并输出提示信息“The X Bit is 0”,要求使用地址表方法实现。网上很容易找到答案,但是用了很多跳转指令,太繁琐,嫌弃!直接上代码data segmentstr1 db 'the 1 bit is 0$',0ah,0dhstr2 db 'the 2 bit is 0$',0ah,0dhstr3 db 'the 3 bit is 0$',0ah,0dhstr4 db 'the 4 bit is 0$',0ah,0dhstr5 d
2020-05-19 21:06:45
1896
原创 SQL-数据库的创建和删除
1.创建数据库EDUC的SQL语句:Create database 数据库名[on (name=数据文件的逻辑文件名,filename=数据文件的物理文件名(含有具体存储路径)[,Size=文件初始大小][,maxsize=文件可以增长到的最大大小][,filegrowth=文件的增长增量])][log on( name=日志文件的逻辑文件名(注意不能和数据文件的逻辑名相同), filename=日志文件的物理文件名(含有具体存储路径) [,size=文件初始大小][,maxsize
2020-05-12 19:31:35
298
原创 Java子类覆盖/重写(override)父类方法的原则
不能覆盖标识为final的方法,也不能覆盖不可被继承的方法。子类的方法权限必须高于父类方法,或者说父类中的方法在子类中必须可见。如父类中的方法属性为private,子类可以继承而不可覆盖。访问权限由高到低:public、protected、包访问权限(默认)、private。子类和父类的方法必须是实例方法。如果父类方法和子类方法都是static方法,子类隐藏父类而非覆盖。如果父类方法和子类方法有一个是静态方法,编译器会报错子类和父类的方法必须要具有相同的函数名称、参数列表,并且子类的返回值与父类相同.
2020-05-12 09:15:51
5015
1
原创 【初学Java】package
这里是关于java包的一些内容包的作用语法格式import关键字package 的目录结构包的作用把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用;同一个包中的类名字是不同的,不同的包中的类的名字是可以相同的,包可以避免名字冲突,当同时调用两个不同包中相同类名的类时,加上包名加以区别;限定访问权限,拥有包访问权限的类才能访问某个包中的类;Java使用package式为了防...
2020-04-19 09:17:56
738
原创 leetcode2020春招刷题 1013
这题按照官方的做法时间开销和空间开销都很大,看了一下数据,发现一个大神的代码,发现几个看不懂的地方,拉过来学习一下。static auto _ = [](){ ios::sync_with_stdio(false); //分离print和cout的流 cin.tie(NULL); //解绑cin和cout return nullptr;}();class Solut...
2020-03-11 18:46:09
157
原创 leetcode2020春招刷题第三天 面试题10.01 合并排序的数组
给了两个参数可以直接用来访问元素,就从数组尾开始比较,把大的放到后面,需要注意边界情况void merge(vector<int>& A, int m, vector<int>& B, int n) { while(m && n){ if(B[n-1] >= A[m-1]){ ...
2020-03-03 08:06:19
104
原创 leetcode2020春招刷题第二天 206.反转链表
这个题目是在学习数据结构时一定会思考过的问题,需要注意的是头结点的和空指针的处理,很简单,直接上代码/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {}...
2020-03-02 08:34:48
95
原创 leetcode2020春招刷题第一天 225.用队列实现栈
这题的关键在于队列和栈的不同存储顺序,队列是先进先出,栈是后进先出。首先回顾一下STL的queue给出的函数queue name; //队列类型变量定义name.push() //入队操作,新来的在队尾name.front() //取队头name.back() //取队位name.pop() //去头name.empty() //判空name.size() //返...
2020-03-01 21:00:39
124
原创 回头再看C++【第八天】
回头再看C++【第八天】函数函数基础函数的参数返回值和返回语句调用函数函数递归指向函数的指针函数main()和命令行处理补充一点函数函数是指一段在一起的、可以做某一件事儿的程序。也叫做子程序、(OOP中)方法。一个较大的程序一般应分为若干个程序块,每一个模块用来实现一个特定的功能。使用时不需要关心模块内功能的实现,只需要清楚各个接口的使用就行。函数基础函数的定义就是对函数的说明描述,包括...
2020-02-12 10:51:50
350
原创 回头再看C++【第七天】
回头再看C++【第七天】复合类型数组多维数组动态数组数组存储数组初始化指针和数组枚举结构体联合typedef复合类型C++的基本类型可以进行组合,组合成为更加复杂的类型,这就是复合类型。C++中的常用复合类型有数组、枚举、结构体和共用体。复合数据类型的每个变量均可以存储多项信息数组数组的优点在于,一个数组可以把许多个值存储在同一个变量名下,但不能把不同类型的数据混杂保存在同一个数组里ty...
2020-02-07 10:27:53
103
原创 回头再看C++【第六天】
回头再看C++【第七天】指针内存地址指针的定义识别指针指针的分类指针初始化指针运算算术运算关系运算指针的指针指针赋值‘*’和‘&’指针和引用特殊指针void型指针空指针指针内存地址要理解指针的含义和使用方法,首先要了解计算机的数据存储。计算机使用多个连续的二进制位来记录数据。学过数字逻辑的同学很容易理解,内存就是成组的寄存器按规律排列而成,可以简单的理解为一个表格,每个格子内保存一个...
2020-02-05 10:50:26
86
原创 leetcode 26.删除排序数组中的重复项
先说一下解题思路,因为要求只使用O(1)的额外空间,想到的办法是用这个空间记录从数组头部到当前处理的数字前有多少个重复项,这样只需把当前的数向前移动记录的数个位置即可。要求返回的是有多少给不重复的项,于是处理结束后再对数组进行遍历。应该还有更简便的方法,但暂时没有想到这道题遇到了两个问题越界最开始做遍历数组计算有多少不重复项时,使用这样的语句:for(int i = 0; i < n...
2020-02-03 10:53:00
151
原创 回头再看C++【第五天】
回头再看C++【第五天】流程控制语句语句和语句块顺序结构选择结构循环结构流程控制语句C++语言结构化程序由若干个基本结构构成,每个基本结构可以包含一条或若干条语句。程序中语句的执行顺序称为程序结构,如果程序语句是按照书写顺序执行的,则称为顺序结构;如果是按照某个条件来决定是否执行,则称为选择结构;如果某些语句要反复执行多次,则称为循环结构。语句和语句块语句是指定程序做什么和程序所处理的数据...
2020-02-01 11:19:27
108
原创 回头再看C++【第四天】
回头再看C++【第四天】运算符赋值运算符算术运算符比较运算符逻辑运算符自增自减运算符位运算符求字节数运算符条件运算符其他运算符其他相关表达式类型转换运算符运算符指定了对操作数所进行的运算类别。赋值运算符C++语言提供了两类赋值运算符:基本赋值运算符和复合赋值运算符,具体说明如下。基本赋值运算符:=。复合赋值运算符:+=、−=、*=、/=、%=、<<=、>>=、...
2020-01-31 19:35:33
115
原创 回头再看C++【第三天】
回头再看C++【第三天】变量变量的声明和定义变量的作用域和生存期存储类型初始化变量变量命名常量小结变量变量是指内容可变化的量,是访问和保存数据的媒介。变量的声明和定义变量的声明确定了变量的类型、大小、名字等信息,定义则是在声明的基础上为变量分配内存。可以粗浅的认为:type val1; //是声明type val2 = val; //(val是常量)是定义同一个变量可以在...
2020-01-21 15:45:52
131
原创 回头再看C++【第二天】
标识符标识符,就是为变量函数以及其他对象所起的名称。包括保留字(预定义标识符)和自定义标识符。C++中的标识符经常用在以下情况中:表示对象或变量的名字。类、结构和联合的成员。函数或类的成员函数。自定义类型名。标识宏的名字。宏的参数。常见的C++保留字如下表所示:表中的预留关键字已经被赋予了特殊的含义,不能再被命名为其他的对象。在C++语言中,标识符一般遵循如下命名规则:...
2020-01-20 15:47:41
127
原创 回头再看C++【第一天】
回头再看C++【第一天】序起因参考书目序起因 已经是大二的寒假了,c++是大一上学期的课程,中间也接触了python和Java,都只是初窥门径。上学期有学长学姐传授学习经验,提到*基础很重要*,于是就打算从头再学习一遍C++,为之后的学习和工作打好基础。这个系列的blog作为自己学习的笔记和备忘,也希望能够 给初学者和有困惑的同行者提供一些帮助。参考书目使用的是王石磊和韩海玲编写...
2020-01-15 13:51:49
159
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人