- 博客(40)
- 收藏
- 关注
原创 Laravel 使用 rabbitmq (Facades)
1.安装依赖composer require php-amqplib/php-amqplib2.编写配置文件\config\queue.php<?phpreturn [ 'connections' => [ //...... 'rabbitmq' => [ 'driver' =&...
2019-09-21 16:36:32
1036
原创 超过5名学生的课 - LeetCode (sql)
有一个courses 表 ,有: student (学生) 和 class (课程)。请列出所有超过或等于5名学生的课。例如,表:±--------±-----------+| student | class |±--------±-----------+| A | Math || B | English || C ...
2019-08-27 23:09:37
194
原创 超过经理收入的员工 - LeetCode (sql)
Employee 表包含所有员工,他们的经理也属于员工。每个员工都有一个 Id,此外还有一列对应员工的经理的 Id。±—±------±-------±----------+| Id | Name | Salary | ManagerId |±—±------±-------±----------+| 1 | Joe | 70000 | 3 || 2 ...
2019-08-27 23:09:06
286
原创 阶乘后的零 - LeetCode
给定一个整数 n,返回 n! 结果尾数中零的数量。示例 1:输入: 3输出: 0解释: 3! = 6, 尾数中没有零。示例 2:输入: 5输出: 1解释: 5! = 120, 尾数中有 1 个零.说明: 你算法的时间复杂度应为 O(log n) 。解法:我们观察一下,5 的阶乘结果是 120,零的个数为 1:5! = 5 * 4 * 3 * 2 * 1 = 120末尾唯一...
2019-08-27 23:08:10
147
原创 求众数 - LeetCode
给定一个大小为 n 的数组,找到其中的众数。众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在众数示例 1:输入: [3,2,3]输出: 3示例 2:输入: [2,2,1,1,1,2,2]输出: 2解法:如果所有数字被单调递增或者单调递减的顺序排了序,那么下标为 n / 2 的数必为众数PHPclass Solution {...
2019-08-27 23:07:20
139
原创 两数之和 II - 输入有序数组 - LeetCode
给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数。函数应该返回这两个下标值 index1 和 index2,其中 index1 必须小于 index2。说明:返回的下标值(index1 和 index2)不是从零开始的。你可以假设每个输入只对应唯一的答案,而且你不可以重复使用相同的元素。示例:输入: numbers = [2, 7,...
2019-08-26 23:27:55
72
原创 相交链表 - LeetCode
编写一个程序,找到两个单链表相交的起始节点。如果两个链表没有交点,返回 null.在返回结果后,两个链表仍须保持原有的结构。可假定整个链表结构中没有循环。程序尽量满足 O(n) 时间复杂度,且仅用 O(1) 内存。解法:变相上环指针 pA 指向 A 链表,指针 pB 指向 B 链表,依次往后遍历如果 pA 到了末尾,则 pA = headB 继续遍历如果 pB 到了末尾,则 pB...
2019-08-26 23:27:24
88
原创 环形链表 - LeetCode
给定一个链表,判断链表中是否有环。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。示例 1:输入:head = [3,2,0,-4], pos = 1输出:true解释:链表中有一个环,其尾部连接到第二个节点。示例 2:输入:head = [1,2], pos = 0输出:tr...
2019-08-26 23:26:58
67
原创 二叉树的层次遍历 II - LeetCode
给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)例如:给定二叉树 [3,9,20,null,null,15,7],3/ 9 20/ 15 7返回其自底向上的层次遍历为:[[15,7],[9,20],[3]]解法:使用递归遍历二叉树框架的基本方法,同时添加 list 、 depth 两个参数实现,de...
2019-08-22 00:09:46
227
原创 相同的树 - LeetCode
给定两个二叉树,编写一个函数来检验它们是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。示例 1:输入: 1 1/ \ / 2 3 2 3 [1,2,3], [1,2,3]输出: true示例 2:输入: 1 1/ 2 ...
2019-08-22 00:09:00
82
原创 合并两个有序数组 - LeetCode
给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。说明:初始化 nums1 和 nums2 的元素数量分别为 m 和 n。你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。示例:输入:nums1 = [1,2,3,0,0,0], m = 3nums2 = [2,...
2019-08-20 14:45:57
136
原创 爬楼梯 - LeetCode
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1 阶 + 1 阶2 阶示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。1 阶 + 1 阶 + 1 阶1 阶 + 2 阶2 阶 + 1 阶...
2019-08-19 12:13:25
82
原创 加一 - LeetCode
给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。示例 1:输入: [1,2,3]输出: [1,2,4]解释: 输入数组表示数字 123。示例 2:输入: [4,3,2,1]输出: [4,3,2,2]解释: 输入数组表示数字 4321。解法:情况有...
2019-08-15 17:40:38
120
原创 最后一个单词的长度 - LeetCode
给定一个仅包含大小写字母和空格 ’ ’ 的字符串,返回其最后一个单词的长度。如果不存在最后一个单词,请返回 0 。说明:一个单词是指由字母组成,但不包含任何空格的字符串。示例:输入: “Hello World”输出: 5解法:从字符串末尾开始向前遍历,其中主要有两种情况第一种情况,以字符串"Hello World"为例,从后向前遍历直到遍历到头或者遇到空格为止,即为最后一个单词"W...
2019-08-15 17:38:39
380
原创 最大子序和 - LeetCode
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。解法:首先对数组进行遍历,当前最大连续子序列和为 sum,结果为 re如果 sum > 0,则说明 sum 对结果有增益效果,则 sum 保留并加...
2019-08-15 17:37:33
102
原创 搜索插入位置 -LeetCode
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。示例 1:输入: [1,3,5,6], 5输出: 2示例 2:输入: [1,3,5,6], 2输出: 1示例 3:输入: [1,3,5,6], 7输出: 4示例 4:输入: [1,3,5,6], 0输出: 0解法:...
2019-08-01 23:15:15
91
原创 合并两个有序链表 - LeetCode
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4解法:递归,两个链表头部较小的一个与剩下元素的 merge 操作结果合并。PHP/** * Definition for a singly-linked l...
2019-08-01 23:14:40
93
原创 罗马数字转整数 - LeetCode
罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000...
2019-07-30 23:30:19
145
原创 单值二叉树 - LeetCode
如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。只有给定的树是单值二叉树时,才返回 true;否则返回 false输入:[1,1,1,1,1,null,1]输出:true输入:[2,2,2,5,2]输出:false解法:深度优先搜索PHP/** * Definition for a binary tree node. * class TreeNode { * ...
2019-07-25 23:17:21
325
原创 公平的糖果交换 - LeetCode
爱丽丝和鲍勃有不同大小的糖果棒:A[i] 是爱丽丝拥有的第 i 块糖的大小,B[j] 是鲍勃拥有的第 j 块糖的大小。因为他们是朋友,所以他们想交换一个糖果棒,这样交换后,他们都有相同的糖果总量。(一个人拥有的糖果总量是他们拥有的糖果棒大小的总和。)返回一个整数数组 ans,其中 ans[0] 是爱丽丝必须交换的糖果棒的大小,ans[1] 是 Bob 必须交换的糖果棒的大小。如果有多个答案,...
2019-07-25 23:15:42
160
原创 叶子相似的树 - LeetCode
请考虑一颗二叉树上所有的叶子,这些叶子的值按从左到右的顺序排列形成一个 叶值序列 。举个例子,给定一颗叶值序列为 (6, 7, 4, 9, 8) 的树。如果有两颗二叉树的叶值序列是相同,那么我们就认为它们是 叶相似 的。如果给定的两个头结点分别为 root1 和 root2 的树是叶相似的,则返回 true;否则返回 false 。解法:深度优先搜索,将叶子节点推入数组PHP/**...
2019-07-24 23:50:34
93
原创 买卖股票的最佳时机 - LeetCode
给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。注意你不能在买入股票前卖出股票。示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。注意利润不能是...
2019-07-23 23:48:55
153
原创 杨辉三角 - LeetCode
给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。在杨辉三角中,每个数是它左上方和右上方的数的和。示例:输入: 5输出:[[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]PHPclass Solution { /** * @param Integer $numRows * @return ...
2019-07-23 23:48:09
102
原创 二叉树的最大深度 - LeetCode
给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7],返回它的最大深度 3解放:深度优先搜索属于图算法的一种,英文缩写为DFS即Depth First Search.其过程简要来说是对每一个可能的分支路径深入到不能再深入为止PHP/** * D...
2019-07-23 23:47:04
299
原创 删除排序数组中的重复项 - LeetCode
给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。示例 1:给定数组 nums = [1,1,2],函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。你不需要考虑数组中超出新长度后面的元素。示例 2:给定 nums ...
2019-07-22 23:50:07
93
原创 对称二叉树 - LeetCode
给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的,[1,2,2,null,3,null,3] 则不是镜像对称的。解法:该问题可以转化为:两个树在什么情况下互为镜像?如果同时满足下面的条件,两个树互为镜像:1.它们的两个根结点具有相同的值。2.每个树的右子树都与另一个树的左子树镜像对称。PHP/** * Definition for a...
2019-07-22 23:45:06
123
原创 最长公共长度 - LeetCode
编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。示例 1:输入: [“flower”,“flow”,“flight”] 输出: “fl”示例 2:输入: [“dog”,“racecar”,“car”] 输出: “”解释: 输入不存在公共前缀。说明:所有输入只包含小写字母 a-z 。解法:我们从前往后枚举字符串的每一列,先比较每个字符串相同列...
2019-07-17 11:22:50
186
原创 回文数 - LeetCode
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。示例 1:输入: 121 输出: true示例 2:输入: -121 输出: false解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。示例 3:输入: 10 输出: false解释: 从右向左读, 为 01 。因此它不是一个回文数。解法例如,输入...
2019-07-17 11:18:40
118
原创 整数反转 - LeetCode
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。示例 1:输入: 123 输出: 321示例 2:输入: -123 输出: -321示例 3:输入: 120 输出: 21注意:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。解法:反转整数...
2019-07-17 11:14:25
131
原创 两数之和 - LeetCode
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9,所以返回 [0, 1]解法:计算目标值与当...
2019-07-17 10:57:56
92
转载 堆
堆是一个完全二叉树每个节点的值都必须大于等于(或小于等于)其左右孩子节点的值如果每个节点的值都大于等于左右孩子节点的值,这样的堆叫大顶堆;如果每个节点的值都小于等于左右孩子节点的值,这样的堆叫小顶堆。插入:以大顶堆为例,从叶子结点插入,如果比父级元素大,则与父级元素交换位置,依次类推,直到到达根节点(小顶堆恰好相反)删除:每次从堆顶删除元素后,需要从子节点中取值补齐堆顶,依次类推,直到...
2019-07-09 11:21:50
97
转载 二叉排序树
二叉排序树要求,在树中的任意一个节点,其左子树中的每个节点的值,都要小于这个节点的值,而右子树节点的值都大于这个节点的值,所以这么看来,二叉排序树是天然有序的,如果按照中序遍历,得到将是一个从小到大的有序数据集删除节点第一种情况是,如果要删除的节点没有子节点,我们只需要直接将父节点中,指向要删除节点的指针置为 null。第二种情况是,如果要删除的节点只有一个子节点(只有左子节点或者右子节点)...
2019-07-05 13:49:41
2220
转载 Trie树 - 字符串多模式匹配
Trie 树的本质,就是利用字符串之间的公共前缀,将重复的前缀合并在一起构建 Trie 树的过程比较耗时,对于有 n 个字符的字符串集合而言,需要遍历所有字符,对应的时间复杂度是 O(n),但是一旦构建之后,查询效率很高,如果匹配串的长度是 k,那只需要匹配 k 次即可,与原来的主串没有关系,所以对应的时间复杂度是 O(k),基本上是个常量级的数字。应用场景:1.敏感词过滤2.搜索框联想...
2019-07-04 11:40:26
633
转载 KMP - 字符串单模式匹配
字符串单模式匹配算法:KMP参考文章:字符串匹配的KMP算法PHPfunction getNext($str){ $len = strlen($str); $next = [0]; $k = 0; for ($i = 1; $i < $len; $i++) { while ($k > 0 && $str[$k] ...
2019-07-03 16:54:56
125
转载 散列表
通过散列函数(也叫哈希函数)将元素的键映射为数组下标(转化后的值叫做散列值或哈希值),然后在对应下标位置存储记录值。当我们按照键值查询元素时,就是用同样的散列函数,将键值转化数组下标,从对应的数组下标的位置取数据散列冲突指的是 key1 != key2 的情况下,通过散列函数处理,hash(key1) == hash(key2),这个时候,我们说发生了散列冲突,设计再好的散列函数也无法避免散列冲...
2019-07-02 16:14:52
735
转载 二分查找
二分查找 OlognOlognOlogn针对的是一个有序的数据集合(这点很重要),查找思想有点类似分治思想。每次都通过跟区间的中间元素对比,将待查找的区间缩小为之前的一半,直到找到要查找的元素,或者区间被缩小为 0。二分查找针对的必须是已经排序过的有序数组,否则不能使用该算法PHPfunction search($nums, $target){ sort($nums); ...
2019-06-27 11:50:02
95
转载 排序算法
冒泡排序 On2O_{n^2}On21.循环比较相邻值,符合条件就交换位置,一次循环至少让一个元素移动到它应该在的位置2.若在一次循环中没有位置发生交换,则认为该排序已完成PHPfunction bubble_sort(&$nums){ $len = count($nums); for ($i = 0; $i < $len; $i++) { ...
2019-06-24 15:40:30
173
转载 递归
递归写出递归公式,找到终止条件1、一个问题的解可以分解为几个子问题的解2、这个问题与分解之后的子问题,除了数据规模不同,求解思路完全一样3、存在递归终止条件我们在通过递归实现代码的时候,切忌试图通过人脑去分解每个步骤,那样会把自己搞晕的,这种重复迭代的事情交给计算机去做,我们要做的就是抽象出规律,写递归公式,找终止条件,再把它们转化为递归代码...
2019-06-24 15:20:46
202
转载 线性结构
数组1.数组是一种线性表数据结构,它用一组连续的内存空间,来存储一组具有相同类型的数据2.数组的优点是可以通过下标值随机访问数组内的任何元素,算法复杂度是 O(1)3.缺点是删除/插入元素比较费劲,以删除为例,需要在删除某个元素后,将后续元素都往前移一位,如果是插入,则需要将插入位置之后的元素都往后移,所以对数组的插入/删除而言,算法复杂度是 O(n)链表1.链表并不需要一块连续的内存空...
2019-06-24 15:19:06
124
转载 算法复杂度
时间复杂度求解算法的时间复杂度的具体步骤是:1.找出算法中的基本语句,算法中执行次数最多的那条语句就是基本语句,通常是最内层循环的循环体2.计算基本语句的执行次数的数量级,只需计算基本语句执行次数的数量级,这就意味着只要保证基本语句执行次数的函数中的最高次幂正确即可,可以忽略所有低次幂和最高次幂的系数。这样能够简化算法分析,并且使注意力集中在增长率上分析时间复杂度的时候遵循以下原则:1、...
2019-06-24 15:10:31
185
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人