自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

MoeYang

BAT资深劝退工程师;擅长Leetcode暴力题解

  • 博客(80)
  • 资源 (3)
  • 问答 (3)
  • 收藏
  • 关注

原创 Leetcode.315 计算右侧小于当前元素的个数【线段树】

给定一个整数数组 nums,按要求返回一个新数组counts。数组 counts 有该性质: counts[i] 的值是nums[i] 右侧小于nums[i] 的元素的数量。示例:输入:nums = [5,2,6,1]输出:[2,1,1,0]解释:5 的右侧有 2 个更小的元素 (2 和 1)2 的右侧仅有 1 个更小的元素 (1)6 的右侧有 1 个更小的元素 (1)1 的右侧有 0 个更小的元素提示:0 <= nums.length <= ...

2021-02-26 20:28:45 189

原创 Leetcode218.天际线问题【扫描线】

解法如图,假设有一条线从左往右扫描数组:1、遇到左端点,则记录当前x坐标下的最大高度2、遇到右端点,则记录当前x坐标下的最大高度很明显,我们可以采用大顶堆来存储坐标为x时,当前建筑的高度h[x].遇到左端点则把高度入堆,当前堆顶元素即为x处最大高度遇到右端点,则把对应建筑的左端点出堆,此时堆顶同样是x处最大高度代码func getSkyline(buildings [][]int) [][]int { heights := make([][]int, 0, ...

2021-02-24 17:25:58 210

原创 Leetcode.204 求质数【埃氏筛】

统计所有小于非负整数n的质数的数量。示例 1:输入:n = 10输出:4解释:小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 。示例 2:输入:n = 0输出:0示例 3:输入:n = 1输出:0提示:0 <= n <= 5 *解法质数相关问题有个套路方法叫埃氏筛:如果x是质数,那么大于x的倍数2x,3x...一定不是质数。所以我们可以根据这个思路,搞一个数组,记录每个...

2021-02-22 17:02:11 144

原创 Leetcode.152 乘积最大子数组 【动态规划】

给你一个整数数组 nums,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。示例 1:输入: [2,3,-2,4]输出: 6解释:子数组 [2,3] 有最大乘积 6。示例 2:输入: [-2,0,-1]输出: 0解释:结果不能为 2, 因为 [-2,-1] 不是子数组。解法1、暴力法:直接二重循环取最大,时间复杂度O(), 空间复杂度O(1)2、动态规划:我们假设dp[i]是以i为结尾的连续子数组的最大乘积,...

2021-02-12 21:37:11 125

原创 Leetcode 91.解码方法【动态规划】

一条包含字母A-Z 的消息通过以下映射进行了 编码 :'A' -> 1'B' -> 2...'Z' -> 26要 解码 已编码的消息,所有数字必须基于上述映射的方法,反向映射回字母(可能有多种方法)。例如,"111" 可以将 "1" 中的每个 "1" 映射为 "A" ,从而得到 "AAA" ,或者可以将 "11" 和 "1"(分别为 "K" 和 "A" )映射为 "KA" 。注意,"06" 不能映射为 "F" ,因为 "6" 和 "06" 不同。给你一个只含数字的 .

2021-02-06 18:01:37 139

原创 LeetCode 1631. 最小体力消耗路径【并查集】

1631. 最小体力消耗路径你准备参加一场远足活动。给你一个二维rows x columns的地图heights,其中heights[row][col]表示格子(row, col)的高度。一开始你在最左上角的格子(0, 0),且你希望去最右下角的格子(rows-1, columns-1)(注意下标从 0 开始编号)。你每次可以往 上,下,左,右四个方向之一移动,你想要找到耗费 体力 最小的一条路径。一条路径耗费的 体力值是路径上相邻格子之间 高度差绝对值的 最大值决定...

2021-01-29 20:49:17 216

原创 LeetCode 25. K 个一组翻转链表

这题难度是hard,但解法并没什么复杂度,主要是边界判定,所以直接上代码了func reverseKGroup(head *ListNode, k int) *ListNode { if k == 1 || head == nil { return head } var n int head = &ListNode{Next: head} pre := head for node := head.Next; node != nil; { n++ // 每次需要翻转..

2021-01-27 20:00:07 65

原创 最小生成树:Leetcode1135.最低成本联通所有城市

题目:如题,经典的最小生成树解法:1、什么是最小生成树现在假设有一个很实际的问题:我们要在n个城市中建立一个通信网络,则连通这n个城市需要布置n-1一条通信线路,这个时候我们需要考虑如何在成本最低的情况下建立这个通信网?于是我们就可以引入连通图来解决我们遇到的问题,n个城市就是图上的n个顶点,然后,边表示两个城市的通信线路,每条边上的权重就是我们搭建这条线路所需要的成本,所以现在我们有n个顶点的连通网可以建立不同的生成树,每一颗生成树都可以作为一个通信网,当我们构造这个连通网所花的成本最小

2021-01-15 17:41:40 1235

原创 Leetcode面试题 17.24. 最大子矩阵: 套用最大子序列和解法ac二维数组最大子矩阵和

53. 最大子序和给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。这一题大家应该都做过,基本思路是从左到右求数组和tmpSum += arr[i],一旦和tmpSum<0, 就重置tmpSum=0. 遍历一遍就能求最大和,具体证明略。那么进入正题,最大子矩阵是求一个矩阵中的和最大的子矩阵原题如下:给定一个正整数、负整数和 0 组成的 N × M矩阵,编写代码找出元素总和最大的子矩阵。返回一个数组 [r1, c1, ...

2021-01-14 20:38:12 222

原创 Leetcode.735行星撞击或线上跑点追击问题

一条直线上有一些点,每个点有不同方向不同大小的速度,可用[][]int{[1, 3], [3, -1], [10, 2]...} 来表示,其中下标0表示点在直线上的位置,下标1表示点的速度大小(正数向右,负数向左)1、求第一次碰撞发生的时间?2、如果每两个点撞击后都会消失,求稳定后,直线上都剩下哪几个点?3、可能每个点都有自重,自重相同的点撞击后两两消失,自重不同的点撞击后,小的会消失,大的会保留,求稳定状态?最近看到前面这道题,发现leetcode上有个类似的题目,就拿出来做一下。.

2021-01-14 18:53:14 245

原创 单调栈:Leetcode面试题17.21直方图的水量

这题单调栈存数组下标遇arr[i] >=栈顶元素 arr[stack[len-1]] 则出栈stack[len-1]并和新栈顶计算存水量.持续循环直到栈为空或栈顶元素>arr[i],则入栈ifunc trap(height []int) int { if len(height) == 0 { return 0 } var res int var stack []int for i, h := range height { l := len(stack) // ..

2021-01-13 11:23:59 113

原创 拓扑排序:Leetcode207.课程表

对一个有向无环图进行拓扑排序,就是将这个图的某种依赖关系表现出来(排序结果可能不唯一)规则:图中每个顶点只出现一次。 A在B前面,则不存在B在A前面的路径。(不能成环!!!!) 顶点的顺序是保证所有指向它的下个节点在被指节点前面!(例如A—>B—>C那么A一定在B前面,B一定在C前面)。所以,这个核心规则下只要满足即可,所以拓扑排序序列不一定唯一!来看这道题:Leetcode207.课程表你这个学期必须选修 numCourse 门课程,记为0到numCours...

2021-01-12 15:14:32 138

原创 面试题 17.13. 恢复空格: dp+字典树

哦,不!你不小心把一个长篇文章中的空格、标点都删掉了,并且大写也弄成了小写。像句子"I reset the computer. It still didn’t boot!"已经变成了"iresetthecomputeritstilldidntboot"。在处理标点符号和大小写之前,你得先把它断成词语。当然了,你有一本厚厚的词典dictionary,不过,有些词没在词典里。假设文章用sentence表示,设计一个算法,把文章断开,要求未识别的字符最少,返回未识别的字符数。注意:本题相对原题稍作改动,只需.

2021-01-08 22:04:19 108

翻译 系统设计面试题-实现Twitter时间线和搜索

设计Facebook feed和设计Facebook搜索都是类似的问题。步骤1:概述用例和约束收集需求并确定问题的范围。提出问题以澄清用例和约束。讨论假设。如果没有面试官来回答明确的问题,我们将定义一些用例和约束。用例我们将把问题的范围限定为只处理以下用例用户发布微博 该服务向关注者推送推送消息,发送推送通知和电子邮件 用户查看用户时间线(来自用户的活动) 用户查看主时间线(用户关注的人的活动) 用户搜索关键字 服务具有高可用性超出范围该服务将推特推送到Twit.

2021-01-02 17:25:36 799

原创 快速排序的递归及非递归实现

快速排序的递归写法func Quicksort(arr []int, i, j int) { if i >= j { return } m := partion(arr, i, j) Quicksort(arr, i, m-1) Quicksort(arr, m+1, j)}// 把s,e分为两段,并返回分割点idxfunc partion(arr []int, s, e int) int { prefix := arr[s] idx := s + 1 for i .

2020-12-23 14:54:56 327

原创 浅析raft一致性算法

raft怎么解决分布式数据一致性问题的?一句话就是:把分布式数据一致性问题转换为 单节点(Leader)日志持久化问题。只要保证Leader日志存储的持久化,靠leader做日志分发来保证集群中大多数节点的数据一致性。先介绍下用到的概念Leader: 主节点,每个term有且只有一个Candidate:候选主节点,选举未完成时,每个节点都可能宣城自己是候选人Follower:从节点,从主节点同步数据并应答、参与选举投票Term:任期,每个leader当选后会开启新的te...

2020-12-19 16:45:47 233 2

原创 golang源码分析:sync.Pool 如何从读写加锁到无锁

我们知道,早期的sync.Pool,底层是通过互斥锁实现对共享队列的并发访问的,这里会存在的问题是,尽管是分段锁,高并发场景下频繁进行G的wait和runable状态调度其实开销也不算小通过互斥锁保证并发安全的sync.Pool数据结构type Pool struct { noCopy noCopy local unsafe.Pointer // local,固定大小per-P池, 实际类型为 [P]poolLocal localSize uintptr // ..

2020-12-14 17:48:39 432

原创 golang源码分析:channel

首先说一些结论:只有发送端可以close chan,接收端不要搞1、重复 close,产生 panic2、close一个nil,产生 panic3、写未初始化chan永远阻塞4、写close会panic5、make chan返回的是* hchan,所以chan可以随意在函数和go间传递channel 的主要结构:一个环形数组实现的队列,用于存储消息元素;两个链表实现的 goroutine 等待队列,用于存储阻塞在 recv 和 send 操作上的 goroutine;.

2020-12-11 16:26:20 511 1

原创 golang内存逃逸分析

逃逸分析在编译阶段完成,目的是决定内存分配地址是栈还是堆:编译时通过 go build -gcflags=-m 可以查看逃逸对象1、关于堆和栈栈可以简单理解成一次函数调用内部申请到的内存,它们会随着函数的返回把内存还给系统。在栈上申请的内存 :函数返回直接释放,不会引起垃圾回收,对性能没有影响。在堆上申请的对象生命周期可以超出函数调用的作用域,需要gc进行回收。2、看几个demo1、申请临时变量不会逃逸func a() { t := make([]int, 10) //..

2020-12-09 18:49:00 387 1

原创 从“gorm建立mysql数据库连接,偶现tcp: i/o timeout问题”简单看gorm.DB源码

昨天被同事问到一个问题:go服务,gorm建立mysql数据库连接,偶现tcp: i/o timeout问题是怎么回事?说实话,我平时没怎么用过gorm,也只是简单了解它的用法。考虑到问题是连接mysql偶现tcp: i/o timeout, 第一反应是怀疑mysql的负载太高,比如连接数太高导致排队。于是看了下代码对gorm的调用代码:使用gorm建立连接的场景这里看起来没什么问题,连接池的参数也都有配上。// NewDB 连接dbfunc NewDB(dbKey st.

2020-12-08 11:55:51 4055 1

原创 golang内存对齐原理

内存对齐的现象:之前没接触过c艹的同学可以先看下面的例子:type A struct { a bool b string c bool}type B struct { a bool c bool b string}func main() { fmt.Printf("Size A:%d\n", unsafe.Sizeof(A{})) fmt.Printf("Size B:%d\n", unsafe.Sizeof(B{}))}输出结果是

2020-11-30 20:16:27 338

原创 从单测mock失败简单谈golang内联优化

简单说下最近遇到因为go函数内联导致的单测mock问题:假设我们现在有这样一个简单的求max函数:func max(a, b int) int { if a > b { return a } return b}然后我们使用gomonkey来mock掉这个函数(当然,这是为了演示,事实上我们mock掉的一般是rpc调用):// TestMaxfunc TestMax(t *testing.T) { // mock掉max方法 maxMock := ApplyFunc

2020-11-23 11:14:59 3366

原创 golang源码分析:sync.Map

先说结论:sync.Map适用于以下场景读多写少:读多写少的环境下,都是从read的map去读取,不需要加锁,而写多读少的情况下,需要加锁,其次,存在将read数据同步到dirty的操作的可能性,大量的拷贝操作会大大的降低性能 读写不同的key:sync.Map是针对key的值的原子操作,相当于加锁加载 key上,所以,多个key的读写是可以同时并发的// 封装的线程安全的maptype Map struct { // lock mu Mutex // 实际是readOnly这个结构

2020-11-17 17:54:10 142

原创 使用zookeeper进行无状态worker任务分发

无状态worker可以基于订阅redis或kafka消息来实现。不过我们这次用zk来搞一下,实现无状态、可容灾的任务分发系统。1.准备三个持久节点:/tasks // 任务list/workers // 可用进程 /distribute // 已分配任务2.划分角色职责sender: 负责发布向/tasks节点发布任务 worker:负责执行任务master:负责将任务分发给worker执行,并关注执行状态3.具体流程...

2020-11-12 20:19:18 808

原创 布隆过滤器原理及golang的快速实现

最近面临这样的场景:2亿+数据需要调用后端服务A,业务需要1min处理完成,那么A服务承载的tps达到惊人的300w......必须想办法降低tps。那么方案来了:1、把时间窗口拉长 2、降低待处理数据量。拉长时间业务肯定是接受不了的,但是按照以往的经验,这部分数据并不全部需要处理,可能仅有一半真正需要调用A服务,所以我们可以把1亿数据给过滤掉。这里我们维护一个布隆过滤器来进行数据的过滤。----------------以上都是导语----------------1. 布隆过滤器的概

2020-11-12 20:12:58 242

原创 file_get_contents("php://input")的使用方法

接口需要接受 py 传过来的 post 数据但是使用$HTTP_RAW_POST_DATA没办法接受,因为服务器没在 php.ini里面配置改变量的开启最后使用file_get_contents("php://input")得到了数据最后是区别: 1,Coentent-Type仅在取值为application/x-www-data-urlencoded和multipart/form

2017-10-31 10:58:42 3287

转载 php使用curl的SSL和非SSL

三年前写过一篇《一个简陋的支持HTTPS的PHP CURL封装函数》,当时只是知其然不知其所以然,今天来详细梳理一下。 为方便说明,先上代码吧~ 这是今天重新封装的一个函数/** * curl POST * * @param string url * @param array 数据 * @param int 请求超时时间 * @param bo

2017-08-31 18:07:07 1045

转载 Linux scp复制文件,不需要输入密码的技巧

当两台LINUX主机之间要互传文件时可使用SCP命令来实现,建立信任关系之后可不输入密码。 把你的本地主机用户的ssh公匙文件复制到远程主机用户的~/.ssh/authorized_keys文件中 假设本地主机linux100,远程主机linux200 一,在linux100主机里的用户 运行 #ssh-k当两台LINUX主机之间要互传文件时可使用SCP命令来实现,建立信任关系之后可不输入密码

2016-08-27 23:15:57 629

原创 shell读文件时无法读入tab的问题

最近要写一个脚本,遇到一个比较恶心的地方:cat rcv.date.log | while read linedo        echo -e "$line"done 在执行的时候,总是会将每一行中的“\t“分隔符读入成一个空格,导致切分的时候怎么都切不开;后来发现,这样写的话,就可以读入文件中的制表符:cat rcv.date.log | while r

2016-08-27 18:28:31 1255

转载 zendopcache与apc同时使用

以前看优化php的时候知道是怎么弄的,时间一长了又忘记apc和opcache什么关系了后来自己也忘记为什么要同时这两个一起用了。。今天想起来了又翻了出来apc和zendopcache什么区别http://www.laruence.com/2013/03/18/2846.html点击(此处)折叠或打开在以前, 很多人都会选择使用APC, APC

2016-08-11 11:58:05 1913

转载 前端数据展示的评价标准

随着 web 技术的蓬勃发展,前端的展示、交互越来越复杂,在用户的访问、操作过程中产生了大量的数据。由此,前端的数据分析也变得尤为重要。当然,对于站长来说,你可以使用百度统计等各种已有的服务平台,但是,如果现有的统计平台不能满足你的需要,你想开发自己定制化的数据统计平台,或者你是一个纯粹的 geek,想了解背后隐藏的技术,又或者你对前端的数据统计感兴趣,本文就能满足你那颗好奇的心。下面就逐步描述前

2015-03-27 09:56:43 1938

转载 PHP大神的十大优良习惯

1、多阅读手册和源代码没什么比阅读手册更值得强调的事了–仅仅通过阅读手册你就可以学习到很多东西,特别是很多有关于字符串和数组的函数。就在这些函数里面包括许多有用的功能,如果你仔细阅读手册,你会经常发现在以往的项目开发过程中,很多时候你在“重复发明轮子”,而实际上你只需要一个核心函数就可以完成相应的功能。手册是你的朋友。另外,现在有很多使用PHP开发的开源程序。为什么不去学习和借鉴呢?下载一份开

2015-03-03 19:48:06 467

原创 php变量在内核中的存储方式

众所周知,php是使用c语言编写的,c语言是强类型的语言。而php是弱类型的语言,一个变量可以保存任何类型的值。那么这里就涉及到Zend引擎中的实现。在php文件目录下的Zend/zend.h头文件中,可以看到类似的定义:---------------------------------------------------------#define IS

2015-02-21 17:22:12 432

转载 启用ckeditor自带的图片上传功能

本人使用的CKEditor版本是3.6.3。CKEditor配置和部署我就不多说。CKEditor的编辑器工具栏中有一项“图片域”,该工具可以贴上图片地址来在文本编辑器中加入图片,但是没有图片上传。“预览”中有一大堆鸟语,看得很不爽。可以打开ckeditor/plugins/image/dialogs/image.js文件,搜索“b.config.image_previewText”就

2015-02-05 19:57:09 1032

转载 Git两分钟指南

能够从本指南有所收获的例子也许是这样的,一个高中生正在进行他(或是她)的第一个项目,而且并不需要和别人分享代码。(具体讲其实是我儿子,他已经写了很多代码,但是没有时间去学习一个版本控制工具。这份指南是为他写的,当然我觉得别人也能用的到。)对他来说,使用Git是很有意义的。和Subversion不同,他不需要一个服务器,就可以很容易地使用Git(只要他对硬盘进行定期备份,当然,他确实也在这么做)。正

2015-01-17 15:35:11 477

转载 PHP代码优化24条方案

echo比print快。使用echo的多重参数代替字符串连接。在执行for循环之前确定最大循环数,不要每循环一次都计算最大值,最好运用foreach代替。对global变量,应该用完就unset()掉。用单引号代替双引号来包含字符串,这样做会更快一些。因为PHP会在双引号包围的字符串中搜寻变量,单引号则不会。函数代替正则表达式完成相同功能。当执行变量$i的递增或递减时,$i++会比++$i慢一些。

2015-01-14 19:22:12 582

转载 国外程序员收集整理的PHP资源大全

doz在 Github发起维护的一个PHP资源列表,内容包括:库、框架、模板、安全、代码分析、日志、第三方库、配置工具、Web 工具、书籍、电子书、经典博文等等。伯乐在线对该资源列表进行了翻译,译文如下:依赖管理依赖和包管理库Composer/ Packagist:一个包和依赖管理器Composer Installers:一个多框架Composer库安装器Pickle:

2015-01-05 20:28:03 1138

转载 php empty()和isset()的区别

在使用 php 编写页面程序时,我经常使用变量处理函数判断 php 页面尾部参数的某个变量值是否为空,开始的时候我习惯了使用 empty() 函数,却发现了一些问题,因此改用 isset() 函数,问题不再。顾名思义,empty() 判断一个变量是否为“空”,isset() 判断一个变量是否已经设置。正是这种所谓的“顾名思义”,令我开始时走了些弯路:当一个变量值等于0时,empty()也会成立

2015-01-02 17:32:52 470

转载 Hibernate---在Hibernate中获取数据方式与缓存使用

Hibernate获取数据的方式有不同的几种,其与缓存结合使用的效果也不尽相同,而Hibernate中具体怎么使用缓存其实是我们很关心的一个问题,直接涉及到性能方面。  缓存在Hibernate中主要有三个方面:一级缓存、二级缓存和查询缓存 ①一级缓存在Hibernate中对应的为session范围的缓存,也就是当session关闭时缓存即被清除,一级缓存在Hibernate中是不可配置的

2014-12-18 18:24:38 1042

转载 Spring定时任务的几种实现

Spring定时任务的几种实现近日项目开发中需要执行一些定时任务,比如需要在每天凌晨时候,分析一次前一天的日志信息,借此机会整理了一下定时任务的几种实现方式,由于项目采用spring框架,所以我都将结合spring框架来介绍。一.分类从实现的技术上来分类,目前主要有三种技术(或者说有三种产品):Java自带的java.util.Timer类,这个类允许你调度一个

2014-11-26 19:55:12 370

java web项目开发案例精粹par2

java web项目开发案例精粹par2。此文档为第二部分,请先下载第一部分

2014-01-15

java web项目开发案例精粹part1

java web项目开发案例精粹第一部分,安李清喜,实用性强.请下载第二部分

2014-01-15

Java面试题大全

java面试题资源,pdf格式,大量真题

2014-01-15

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

TA关注的人

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