自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 里氏替换原则

里氏替换原则:Liskov Substitution Principle子对象能够替换父类对象出现的任何地方。并且保证原来的逻辑行为不变且保持正确性。怎么做到??通过继承,多态来实现。为什么需要里氏替换?⽽⾥式替换是⼀种设计原则,⽤来指导继承关系中⼦类该如何设计,⼦类的设计要保证在替换⽗类的时候,不改变原有程序的逻辑及不破坏原有程序的正确性。...

2020-08-01 21:31:20 221

原创 开闭原则

开闭原则(Open Closed Principle)添加一个新的功能,是在已有代码基础上扩展代码(模块,类,属性,方法),而非修改已有代码。tips:1.开闭原则不是完全杜绝修改,以最小的修改代价来完成新功能的开发。2.同样的代码改动,在粗粒度下,可能被认定为修改,在细粒度模式,可能被认为拓展。怎么做到“对扩展开放,对修改关闭”??写的每行代码,都要有, 扩展意识,封装意识,抽象意识。提前思考未来需求变化的点,切记不要过度思考。为什么需要开闭原则??本质上是提高代码的可扩展性,这个原则指

2020-08-01 21:11:20 178

原创 单一职责原则

单一职责原则(Single Responsibility Principle),缩写SRP。定义:一个类或者模块只负责完成一个职责(或者功能)。

2020-08-01 20:29:45 484

原创 设计模式-命令模式

命令模式定义:将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。使用场景:只要你认为是命令的地方就可以采用命令模式,例如,在GUI开发中,一个按钮的点击是一个命令,就可以采用命令模式,模拟DOS当然也要采用命令模式。...

2020-05-13 09:19:17 121

原创 设计模式-中介者模式

中介者模式定义:用一个中介对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使其耦合松散,而且可以独立地改变它们之间的交互。使用场景: 中介者模式适合多个对象之间紧密耦合,耦合的标准是:在类图中出现了蜘蛛网状结构。在这种情况下一定要考虑使用中介者模式,这有利于把蜘蛛网梳理为星型结构,使原本复杂混乱的关系变得清晰。1.N个对象之间产生了相互的依赖关系。2.多个对象有依赖关系,但是依赖的行为尚不确定或者有可能发生改变的可能,在这种情况下建议采用中介者模式,降低变更引起的风险扩散。一些例子

2020-05-12 18:19:25 117

原创 设计模式-建造者模式

建造者模式定义(也叫做生成器模式):将一个复杂对象的构建和它的表示分离,使得同样的构建过程可以创建不同的表示。使用场景:相同的方法,不同的执行顺序, 产生不同的事件结果,可以采用建造者模式。多个部件或零件,都可以装配到一个对象中,但是产生的运行结果又不相同时,则可以使用该模式。产品类非常复杂,或者产品类中的调用顺序不同产生了不同的效能,这个时候使用建造者模式非常合适。在对象创建过程中会使用到系统中的一些其他对象,这些对象在产品对象的创建过程中不易得到时,也可以采用建造者模式封装该对象的创建过程、

2020-05-12 09:51:15 93

原创 文件IO

UNIX系统中大多数文件IO函数----------打开文件,读文件,写文件。只需要用到基本5个函数:open,read,write,lseek以及close.主要是不同缓冲区长度对read和write函数的影响。上面说明的函数经常被称为不带缓冲IO,不带缓冲指的是每个read和write都调用内核中的一个系统调用。文件描述符0,与标准输入关联,1与标准输出关联。2与标准出错输出...

2020-04-15 15:42:22 126

原创 基本概念

介绍读到一些常用的概念1.文件描述符文件描述符通常是一个小的非负整数,内核用它标识一个特定进程正在访问的文件。当内核打开一个已有文件或者创建一个新文件,返回一个文件描述符。在读,在写文件时,就可使用它。2.标准IO标准IO函数提供了一种对不用缓冲IO函数的带缓冲的接口,使用这个不用担心如何选取最佳的缓冲大小。eg:printf 在apue.h头文件中3.EOF...

2020-04-15 15:22:23 119

原创 c++ 用于大型程序的工具

17.1 异常处理17.1.1 抛出类类型的异常

2020-04-09 23:02:36 170

原创 C++面向对象编程

15.3转换与继承15.3.1 派生类到基类的转换1.引用不同于转换对象1.将对象传递给希望接受引用的函数时,引用直接绑定到对象,看起来再传递对象,实际上实参是对该对象的引用,对象未被复制。转换不会改变原派生类对象。2.将派生类对象传递给希望接受基类类型对象的函数时(不是引用),情况完全不同,形参是固定的,--在编译和运行时形参都是基类类型对象。如果用派生类型对象调用这种函数时,则...

2020-04-06 23:08:59 154

原创 leetcode 1392 最长快乐前缀

起因,这是某一次周赛的最后一题,不会,后来了解到是利用kmp的next数组.「快乐前缀」是在原字符串中既是非空 前缀也是后缀(不包括原字符串自身)的字符串。给你一个字符串 s,请你返回它的 最长快乐前缀。如果不存在满足题意的前缀,则返回一个空字符串。示例 1:输入:s = "level"输出:"l"解释:不包括 s 自己,一共有 4 个前缀("l", "le", "...

2020-03-31 15:10:50 196

原创 数论,裴蜀定理

在数论中,裴蜀定理是关于最大公约数的一个定理,裴蜀定理得名于法国数学家艾蒂安·裴蜀。这个定理说明了,对任意整数a,b和他们的最大公约数d,存在一个关于ax + by =d; 一个线性方程.同时 gcd(a,b)的值一定是d的整数倍。leetcode 365题有两个容量分别为 x升 和 y升 的水壶以及无限多的水。请判断能否通过使用这两个水壶,从而可以得到恰好 z升 的水?如果可以,最后...

2020-03-21 11:21:15 201

原创 redis sorted set底层跳跃表简单实现(Java)

起因: 以前了解过跳跃表这种数据结构,大致知道是怎么回事,于是很想去实现它。参考:redis设计与实现作者githubC语言头文件主要实现的C源码问题:给你一个链表,怎么实现才能不以O(n)时间复杂度去查找一个元素呢??(有什么更快的实现方式?答案就是跳跃表)跳跃表长这个样:链表加索引这种形式。如果我们想查找5,那我们先从1开始查找,发现1小于5,直接到4,这,小于5,但是4nex...

2020-03-07 12:47:36 612 2

原创 KMP算法

最近复习了以下KMP算法先把网上我认为2篇好文章分享出来:孤~影博客专家我先用大致代码实现介绍:这是KMP主体实现的部分,大逻辑。意思就是原先暴力匹配的过程中,主串回退,子串也回退,浪费了很多时间。KMP匹配的过程就是主串和子串匹配就双索引往后移,若不匹配,只移动子串,而不移动主串。这样大大减少了重复匹配的情况。怎么只移动子串,答案就在于主串和子串失败的地方,子串回到一个当前子串失配...

2020-03-02 19:20:54 114

原创 leetcod212hard单词搜搜II回溯

给定一个二维网格 board 和一个字典中的单词列表 words,找出所有同时在二维网格和字典中出现的单词。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母在一个单词中不允许被重复使用。示例:输入:words = [“oath”,“pea”,“eat”,“rain”] and board =[[‘o’,‘a’,...

2020-02-27 14:12:58 182

原创 leetcode 60 第k个排列

给出集合[1,2,3,…,n],其所有元素共有n! 种排列。按大小顺序列出所有排列情况,并一一标记,当n = 3 时, 所有排列如下:"123""132""213""231""312""321"给定n 和k,返回第k个排列。说明:给定 n的范围是 [1, 9]。给定 k的范围是[1, n!]。示例1:输入: n = 3, k = 3输出:...

2020-02-18 12:44:06 83

原创 leetcode355 设计推特

设计一个简化版的推特(Twitter),可以让用户实现发送推文,关注/取消关注其他用户,能够看见关注人(包括自己)的最近十条推文。你的设计需要支持以下的几个功能:postTweet(userId, tweetId): 创建一条新的推文getNewsFeed(userId): 检索最近的十条推文。每个推文都必须是由此用户关注的人或者是用户自己发出的。推文必须按照时间顺序由最近的开始排序。fol...

2020-02-17 18:58:39 200

原创 leetcode32最长有效括号hard最特殊一种解法

给定一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长的包含有效括号的子串的长度。示例 1:输入: “(()”输出: 2解释: 最长有效括号子串为 “()”示例 2:输入: “)()())”输出: 4解释: 最长有效括号子串为 “()()”思路: 原本这是一道应该用动态规划解的,但是出现了一种神奇的解法,特此记录一下。class Solution { public i...

2020-02-13 16:10:15 96

原创 递归备忘录法-leetcode 72编辑距离

给定两个单词 word1 和 word2,计算出将 word1 转换成 word2 所使用的最少操作数 。你可以对一个单词进行如下三种操作:插入一个字符删除一个字符替换一个字符示例 1:输入: word1 = “horse”, word2 = “ros”输出: 3解释:horse -> rorse (将 ‘h’ 替换为 ‘r’)rorse -> rose (删除 ‘...

2020-02-12 15:35:56 195

原创 floy应用-leetcode1334阈值距离内邻居最少的城市

注意,连接城市 i 和 j 的路径的距离等于沿该路径的所有边的权重之和。示例 1:输入:n = 4, edges = [[0,1,3],[1,2,1],[1,3,4],[2,3,1]], distanceThreshold = 4输出:3解释:城市分布图如上。每个城市阈值距离 distanceThreshold = 4 内的邻居城市分别是:城市 0 -> [城市 1, ...

2020-02-10 13:20:48 143

原创 并查集应用-leetcode547朋友圈

班上有 N 名学生。其中有些人是朋友,有些则不是。他们的友谊具有是传递性。如果已知 A 是 B 的朋友,B 是 C 的朋友,那么我们可以认为 A 也是 C 的朋友。所谓的朋友圈,是指所有朋友的集合。给定一个 N * N 的矩阵 M,表示班级中学生之间的朋友关系。如果M[i][j] = 1,表示已知第 i 个和 j 个学生互为朋友关系,否则为不知道。你必须输出所有学生中的已知的朋友圈总数。示例 ...

2020-02-07 23:01:41 83

原创 并查集应用-leetcode200岛屿数量

给定一个由'1'(陆地)和 '0'(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。示例 1:输入:11110110101100000000输出:1示例2:输入:11000110000010000011输出: 3思路:并查集class Solution...

2020-02-07 22:46:40 126

原创 拓扑排序-leetcode207课程表

现在你总共有 n 门课需要选,记为0到n-1。在选修某些课程之前需要一些先修课程。例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们: [0,1]给定课程总量以及它们的先决条件,判断是否可能完成所有课程的学习?示例 1:输入: 2, [[1,0]]输出: true解释:总共有 2 门课程。学习课程 1 之前,你需要完成课程 0。所以这是可能的...

2020-02-06 20:09:39 103

原创 sql 获取当前薪水第二高

查找当前薪水(to_date='9999-01-01')排名第二多的员工编号emp_no、薪水salary、last_name以及first_name,不准使用order byCREATE TABLE `employees` (`emp_no` int(11) NOT NULL,`birth_date` date NOT NULL,`first_name` varchar(14) NOT ...

2020-02-05 14:30:55 163

原创 sql 获取所有部门中当前员工薪水最高

获取所有部门中当前员工薪水最高的相关信息,给出dept_no, emp_no以及其对应的salaryCREATE TABLE `dept_emp` (`emp_no` int(11) NOT NULL,`dept_no` char(4) NOT NULL,`from_date` date NOT NULL,`to_date` date NOT NULL,PRIMARY KEY (`em...

2020-02-05 13:46:17 182

原创 sql 获取所有部门当前manager的当前情况,给出dept_no,emp_no及salary,to_date='9999-01-01'

获取所有部门当前manager的当前薪水情况,给出dept_no, emp_no以及salary,当前表示to_date='9999-01-01'CREATE TABLE `dept_manager` (`dept_no` char(4) NOT NULL,`emp_no` int(11) NOT NULL,`from_date` date NOT NULL,`to_date` date...

2020-02-05 11:41:02 265

原创 sql 查找薪水涨幅超过15次的员工号emp_no以及对应的涨幅次数t

题目描述查找薪水涨幅超过15次的员工号emp_no以及其对应的涨幅次数tCREATE TABLE `salaries` (`emp_no` int(11) NOT NULL,`salary` int(11) NOT NULL,`from_date` date NOT NULL,`to_date` date NOT NULL,PRIMARY KEY (`emp_no`,`from_d...

2020-02-05 11:17:33 101

原创 sql查找所有员工入职时的薪水情况

查找所有员工入职时候的薪水情况,给出emp_no以及salary, 并按照emp_no进行逆序CREATE TABLE `employees` (`emp_no` int(11) NOT NULL,`birth_date` date NOT NULL,`first_name` varchar(14) NOT NULL,`last_name` varchar(16) NOT NULL,`...

2020-02-05 11:06:41 374

原创 sql 查找所有部门分配的last_name和firstname

题目描述查找所有已经分配部门的员工的last_name和first_nameCREATE TABLE `dept_emp` (`emp_no` int(11) NOT NULL,`dept_no` char(4) NOT NULL,`from_date` date NOT NULL,`to_date` date NOT NULL,PRIMARY KEY (`emp_no`,`dep...

2020-02-05 10:56:05 173

原创 leetcode 227基本计算器II

实现一个基本的计算器来计算一个简单的字符串表达式的值。字符串表达式仅包含非负整数,+, - ,*,/ 四种运算符和空格 。 整数除法仅保留整数部分。示例 1:输入: “3+2*2”输出: 7示例 2:输入: " 3/2 "输出: 1示例 3:输入: " 3+5 / 2 "输出: 5说明:你可以假设所给定的表达式都是有效的。请不要使用内置的库函数 eval。思路: 用2...

2020-02-02 16:08:23 96

原创 leetcode307 区域和检索-数组可修改

给定一个整数数组 nums,求出数组从索引 i 到 j (i ≤ j) 范围内元素的总和,包含 i, j 两点。update(i, val) 函数可以通过将下标为 i 的数值更新为 val,从而对数列进行修改。示例:Given nums = [1, 3, 5]sumRange(0, 2) -> 9update(1, 2)sumRange(0, 2) -> 8说明:...

2020-02-02 14:51:03 114

原创 leetcode 870优势洗牌

给定两个大小相等的数组A和B,A 相对于 B 的优势可以用满足A[i] > B[i]的索引 i的数目来描述。返回A的任意排列,使其相对于 B的优势最大化。示例 1:输入:A = [2,7,11,15], B = [1,10,4,11]输出:[2,11,7,15]示例 2:输入:A = [12,24,8,32], B = [13,25,32,11]...

2020-02-01 14:41:33 118

原创 设计模式-模板方法模式

模板方法模式定义:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中,模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。模板模式解决了什么问题:定义一个算法模板,同时保护了模板步骤不被更改,同时可以复用代码, 由子类提供实现。钩子:是一种被声明在抽象类中的方法,但只有空的或者默认的实现。钩子的存在,可以让子类有能力对算法的不同点进行挂钩。以及好莱坞原则:高层组件调...

2020-01-31 21:38:59 71

原创 leetcode738 单调递增的数字

给定一个非负整数 N,找出小于或等于 N 的最大的整数,同时这个整数需要满足其各个位数上的数字是单调递增。(当且仅当每个相邻位数上的数字 x 和 y 满足 x <= y 时,我们称这个整数是单调递增的。)示例 1:输入: N = 10输出: 9示例 2:输入: N = 1234输出: 1234示例 3:输入: N = 332输出: 299说明: N 是在 [0, 10^...

2020-01-31 21:33:44 111

原创 leetcode416分割等和子集

给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。注意:每个数组中的元素不会超过 100数组的大小不会超过 200示例 1:输入: [1, 5, 11, 5]输出: true解释: 数组可以分割成 [1, 5, 5] 和 [11].示例 2:输入: [1, 2, 3, 5]输出: false解释: 数组不能分割成两个元素和相等的子集....

2020-01-31 20:16:59 173

原创 leetcode986 区间列表的交集

给定两个由一些闭区间组成的列表,每个区间列表都是成对不相交的,并且已经排序。返回这两个区间列表的交集。(形式上,闭区间 [a, b](其中 a <= b)表示实数 x 的集合,而 a <= x <= b。两个闭区间的交集是一组实数,要么为空集,要么为闭区间。例如,[1, 3] 和 [2, 4] 的交集为 [2, 3]。)示例:输入:A = [[0,2],[5,10],[...

2020-01-31 20:13:36 89

原创 bitmap用法字符隐射 leetcode 318 最大单词长度乘积

给定一个字符串数组 words,找到 length(word[i]) * length(word[j]) 的最大值,并且这两个单词不含有公共字母。你可以认为每个单词只包含小写字母。如果不存在这样的两个单词,返回 0。示例 1:输入: [“abcw”,“baz”,“foo”,“bar”,“xtfn”,“abcdef”]输出: 16解释: 这两个单词为 “abcw”, “xtfn”。示例 2...

2020-01-30 16:16:59 143

原创 leetcode801 使序列递增的最小交换次数

我们有两个长度相等且不为空的整型数组 A 和 B 。我们可以交换 A[i] 和 B[i] 的元素。注意这两个元素在各自的序列中应该处于相同的位置。在交换过一些元素之后,数组 A 和 B 都应该是严格递增的(数组严格递增的条件仅为A[0] < A[1] < A[2] < … < A[A.length - 1])。给定数组 A 和 B ,请返回使得两个数组均保持严格递增状...

2020-01-29 22:02:54 167

原创 leetcode 1019 链表中的下一个更大节点

给出一个以头节点head作为第一个节点的链表。链表中的节点分别编号为:node_1, node_2, node_3, ... 。每个节点都可能有下一个更大值(next larger value):对于node_i,如果其next_larger(node_i)是node_j.val,那么就有j > i且node_j.val > node_i.val,而j是可能...

2020-01-29 11:54:57 443

原创 摩尔投票法

背景: leetcode 169题求一个数组中,出现次数大于 n/2;的元素如果在一个遍历中解决这个问题??答案就是摩尔投票法。摩尔投票法:用一个计数器,每次当计数器为0时,以当前遍历元素为起点遍历,当往下遍历时,相同元素计数加1,元素不同计数器减1。那么最后剩下的元素为出现次数大于n/2。eg: [2222221111]; public int majorityElement(in...

2020-01-28 17:14:34 79

空空如也

空空如也

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

TA关注的人

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