Leetcode PHP题解--D76 993. Cousins in Binary Tree

D76 993. Cousins in Binary Tree 题目链接 993. Cousins in Binary Tree 题目分析 在二叉树中,若两个叶子节点的层数相同,但具有不同的父节点,那么这两个节点互为cousin节点。 给定一个二叉树及x、y两个节点,返回x、y两个节点在二叉树中,是否互为cousin节点。 思路 因为x和y在二叉树中唯一,故我们可已先遍历整个二叉树,把当...

Leetcode树的层次遍历之PHP解析(102. Binary Tree Level Order Traversal)

给定一棵树,按照他的层次进行遍历,返回。DFS和BFS都可以解,竟然已经要我们按照层打印了,那么先使用BFS,思路就是先判断树是否是空,不是空加入一个队列的结构中,如果队列不为空,取出头元素,那么当前元素表示的就是当前这一层了,所以只需要遍历这一层里的所有的元素即可,然后下一层.......

基于 Swoole 构建高性能 Laravel 应用系列 —— 基于 Swoole 在 Laravel 中实现异步任务队列

Swoole 异步任务 实现原理 我们知道,PHP 本身的设计是同步阻塞的,不支持多线程和异步 IO,所以当我们执行一些耗时的操作,比如发送广播,或者邮件,如果直接在当前进程中操作,会导致服务器响应变慢,因此要借助一些第三方服务来处理以实现异步功能,比如队列,而 Swoole 作为 PHP 异步网络通信引擎,自然也对异步任务处理提供了支持,其底层的实现原理和常见的异步队列类似:将耗时任务...

Go 语言函数式编程系列(一) —— 变量声明、初始化、赋值及作用域

变量是几乎所有编程语言中最基本的组成元素。从本质上说,变量相当于是对一块数据存储空间的命名,程序可以通过定义一个变量来申请一块数据存储空间,之后可以通过引用变量名来使用这块存储空间。 由于 Go 语言是强类型静态语言,所以变量声明与赋值方式与 PHP 相比有很大的区别。 变量声明 对于纯粹的变量声明,Go 语言引入了关键字 var,并且将类型信息放在变量名之后,此外,变量声明语句不需要使...

基于 Swoole 构建高性能 Laravel 应用系列 —— 基于 Swoole 定时器实现毫秒级任务调度

Swoole 定时器简介 Swoole 提供了异步高精度定时器功能,该功能类似 JavaScript 的 setInterval/setTimeout,粒度为毫秒级,底层基于 epoll_wait(异步)和 setitimer(同步)实现,数据结构使用最小堆。定时器的添加和删除,全部为内存操作,无 IO 消耗,因此性能是非常高的。 需要注意的是,Swoole 实现的定时器与 PHP 自带...

Go 语言零基础入门系列教程(三) —— 单元测试、问题定位及代码调试

单元测试 编写单元测试 在 Go 语言中,支持为功能模块编写单元测试代码,继续以上篇教程构建的计算器项目为例,在 simplemath 包中,我们可以为每一个运算模块编写了对应的单元测试代码,单元测试文件以 _test 作为文件名后缀来标识,比如我们通过 add_test.go 和 sqrt_test.go 文件分别为 add.go 和 sqrt.go 编写单元测试,对应的目录结构如下:...

Leetcode PHP题解--D74 999. Available Captures for Rook

D74 999. Available Captures for Rook 题目链接 999. Available Captures for Rook 题目分析 在国际象棋中,“车”可以横向或竖向移动任意格子。 给定代表棋盘格子的二维数组,出现的大写字母代表白方,小写代表黑方。.代表空白格子。 返回白色车只走一次棋,有多少种吃法。 思路 先从二维数组中找到白色车R。再往四个方向遍历。 在逐...

Leetcode PHP题解--D73 389. Find the Difference

D73 389. Find the Difference 题目链接 389. Find the Difference 题目分析 给定两个字符串,其中一个字符串比另一个字符串在随机位置多一个字符。 返回多出来的字符。 思路 用array_count_values计算字符串中字符出现的次数,对比两个字符串的字符出现次数。计算差集,返回差异部分即可。 最终代码 ...