Beats

【Leetcode 做题学算法周刊】第一期

99封情书 提交于 2020-04-28 03:27:51
首发于微信公众号《前端成长记》,写于 2019.10.28 背景 本文记录刷题过程中的整个思考过程,以供参考。主要内容涵盖: 题目分析设想 编写代码验证 查阅他人解法 思考总结 目录 1.两数之和 7.整数反转 9.回文数 13.罗马数字转整数 14.最长公共前缀 Easy 1.两数之和 题目地址 题目描述 给定一个整数数组 nums 和一个目标值 target ,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。 示例: 给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1] 题目分析设想 这道题首先说明了每种输入只会对应一个答案,并且不能利用数组中同样的元素,也就意味着一个数不能被使用两次,即 [0,0] 这种是不合理的。 看到这个题目,我有几个方向去尝试作答: 暴力点,直接循环两次即可,预估性能最差 IndexOf ,循环次数最多, 非常不推荐 空间换时间,使用 HashMap ,减少一次循环 编写代码验证 Ⅰ.暴力法 代码: // 暴力点 /** * @param {number[]} nums * @param {number} target * @return

【Leetcode 做题学算法周刊】第三期

筅森魡賤 提交于 2020-04-28 03:27:30
首发于微信公众号《前端成长记》,写于 2019.11.13 背景 本文记录刷题过程中的整个思考过程,以供参考。主要内容涵盖: 题目分析设想 编写代码验证 查阅他人解法 思考总结 目录 35.搜索插入位置 38.报数 53.最大子序和 58.最后一个单词的长度 66.加一 Easy 35.搜索插入位置 题目地址 题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 你可以假设数组中无重复元素。 示例: 输入: [1,3,5,6], 5 输出: 2 输入: [1,3,5,6], 2 输出: 1 输入: [1,3,5,6], 7 输出: 4 输入: [1,3,5,6], 0 输出: 0 题目分析设想 这道题目有点明显,题干说明了是排序数组,重点是排序数组,所以很明显的第一反应会使用二分法来解题。同时可以注意一下,数组中无重复元素。所以这道题我就按两个方案来作答: 暴力法,直接遍历 二分法,可以理解成不断折半排除不可能 编写代码验证 Ⅰ.暴力法 代码: /** * @param {number[]} nums * @param {number} target * @return {number} */ var searchInsert = function(nums, target) { if (nums

【Leetcode 做题学算法周刊】第二期

一笑奈何 提交于 2020-04-28 02:44:58
首发于微信公众号《前端成长记》,写于 2019.11.05 背景 本文记录刷题过程中的整个思考过程,以供参考。主要内容涵盖: 题目分析设想 编写代码验证 查阅他人解法 思考总结 目录 20.有效的括号 21.合并两个有序链表 26.删除排序数组中的重复项 27.移除元素 28.实现strStr Easy 20.有效的括号 题目地址 题目描述 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 注意空字符串可被认为是有效字符串。 示例: 输入: "()" 输出: true 输入: "()[]{}" 输出: true 输入: "(]" 输出: false 输入: "([)]" 输出: false 输入: "{[]}" 输出: true 题目分析设想 这道题从题面来看,仍然需要对字符串做遍历处理,找到相互匹配的括号,剔除后继续做处理即可。所以这道题我的解题想法是: 使用栈来记录,匹配的一对就出栈,最后判断栈是否为空 有几点需要注意下,可以减少一些计算量: 题面说明了字符串只含有三种括号,所以长度为奇数,一定无效 只要有一对不符合,则可判定一定无效 堆栈长度超过字符串长度一半,则一定无效 先找到右括号则一定无效 编写代码验证 Ⅰ.记录栈 代码: /** *

【Leetcode 做题学算法周刊】第四期

China☆狼群 提交于 2020-04-28 02:44:40
首发于微信公众号《前端成长记》,写于 2019.11.21 背景 本文记录刷题过程中的整个思考过程,以供参考。主要内容涵盖: 题目分析设想 编写代码验证 查阅他人解法 思考总结 目录 67.二进制求和 69.x的平方根 70.爬楼梯 83.删除排序链表中的重复元素 88.合并两个有序数组 Easy 67.二进制求和 题目地址 题目描述 给定两个二进制字符串,返回他们的和(用二进制表示)。 输入为非空字符串且只包含数字 1 和 0 。 示例: 输入: a = "11", b = "1" 输出: "100" 输入: a = "1010", b = "1011" 输出: "10101" 题目分析设想 这道题又是一道加法题,所以记住下,直接转数字进行加法可能会溢出,所以不可取。所以我们需要遍历每一位来做解答。我这有两个大方向:补0后遍历,和不补0遍历。但是基本的依据都是本位相加,逢2进1即可,类似手写10进制加法。 补0后遍历,可以采用先算出的位数推入数组最后反转,也可以采用先算出的位数填到对应位置后直接输出 不补0遍历,根据短数组的长度进行遍历,长数组剩下的数字与短数组生成的进位进行计算 查阅他人解法 Ⅰ.补0后遍历,先算先推 代码: /** * @param {string} a * @param {string} b * @return {string} */ var

【Leetcode 做题学算法周刊】第五期

被刻印的时光 ゝ 提交于 2020-04-28 01:20:53
首发于微信公众号《前端成长记》,写于 2019.12.06 背景 本文记录刷题过程中的整个思考过程,以供参考。主要内容涵盖: 题目分析设想 编写代码验证 查阅他人解法 思考总结 目录 100.相同的树 101.对称二叉树 104.二叉树的最大深度 107.二叉树的层次遍历II 108.将有序数组转换为二叉搜索树 Easy 100.相同的树 题目地址 题目描述 给定两个二叉树,编写一个函数来检验它们是否相同。 如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。 示例: 输入: 1 1 / \ / \ 2 3 2 3 [1,2,3], [1,2,3] 输出: true 输入: 1 1 / \ 2 2 [1,2], [1,null,2] 输出: false 输入: 1 1 / \ / \ 2 1 1 2 [1,2,1], [1,1,2] 输出: false 题目分析设想 题目直接说了是二叉树,而二叉树的遍历方式有两种:深度优先和广度优先,我就从这两个思路来作答。 编写代码验证 Ⅰ.深度优先 代码: /** * @param {TreeNode} p * @param {TreeNode} q * @return {boolean} */ var isSameTree = function(p, q) { if (p === null && q === null)

使用docker-elk搭建并实践ELK日志分析框架

隐身守侯 提交于 2020-04-09 12:36:28
1. ELK日志分析简介 1.1 ELK日志分析概述   ELK可运行于分布式系统之上,通过搜集、过滤、传输、储存,对海量系统和组件日志进行集中管理和准实时搜索、分析,使用搜索、监控、事件消息和报表等简单易用的功能,帮助运维人员进行线上业务的准实时监控、业务异常时及时定位原因、排除故障、程序研发时跟踪分析Bug、业务趋势分析、深度挖掘日志的大数据价值。ELK主要可解决的问题如下:1.日志查询,问题排查,上线检查.2.服务器监控,应用监控,错误报警,Bug管理. 3.性能分析,安全漏洞分析。综上,ELK是一套方便、易用的日志分析开源解决方案。 1.2 ELK主要组件介绍   生产环境中,ELK通常由以下4个组件构成: 1.2.1 ElasticSearch组件   ElasticSearch是一个基于Lucene的开源分布式搜索服务器。它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是第二流行的企业搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。 1.2.2 Logstash组件   Logstash是一个完全开源的工具

【Leetcode 做题学算法周刊】第三期

偶尔善良 提交于 2020-03-25 06:45:11
首发于微信公众号《前端成长记》,写于 2019.11.13 背景 本文记录刷题过程中的整个思考过程,以供参考。主要内容涵盖: 题目分析设想 编写代码验证 查阅他人解法 思考总结 目录 35.搜索插入位置 38.报数 53.最大子序和 58.最后一个单词的长度 66.加一 Easy 35.搜索插入位置 题目地址 题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 你可以假设数组中无重复元素。 示例: 输入: [1,3,5,6], 5 输出: 2 输入: [1,3,5,6], 2 输出: 1 输入: [1,3,5,6], 7 输出: 4 输入: [1,3,5,6], 0 输出: 0 题目分析设想 这道题目有点明显,题干说明了是排序数组,重点是排序数组,所以很明显的第一反应会使用二分法来解题。同时可以注意一下,数组中无重复元素。所以这道题我就按两个方案来作答: 暴力法,直接遍历 二分法,可以理解成不断折半排除不可能 编写代码验证 Ⅰ.暴力法 代码: /** * @param {number[]} nums * @param {number} target * @return {number} */ var searchInsert = function(nums, target) { if (nums

【Leetcode 做题学算法周刊】第四期

流过昼夜 提交于 2020-03-18 13:32:44
首发于微信公众号《前端成长记》,写于 2019.11.21 背景 本文记录刷题过程中的整个思考过程,以供参考。主要内容涵盖: 题目分析设想 编写代码验证 查阅他人解法 思考总结 目录 67.二进制求和 69.x的平方根 70.爬楼梯 83.删除排序链表中的重复元素 88.合并两个有序数组 Easy 67.二进制求和 题目地址 题目描述 给定两个二进制字符串,返回他们的和(用二进制表示)。 输入为非空字符串且只包含数字 1 和 0 。 示例: 输入: a = "11", b = "1" 输出: "100" 输入: a = "1010", b = "1011" 输出: "10101" 题目分析设想 这道题又是一道加法题,所以记住下,直接转数字进行加法可能会溢出,所以不可取。所以我们需要遍历每一位来做解答。我这有两个大方向:补0后遍历,和不补0遍历。但是基本的依据都是本位相加,逢2进1即可,类似手写10进制加法。 补0后遍历,可以采用先算出的位数推入数组最后反转,也可以采用先算出的位数填到对应位置后直接输出 不补0遍历,根据短数组的长度进行遍历,长数组剩下的数字与短数组生成的进位进行计算 查阅他人解法 Ⅰ.补0后遍历,先算先推 代码: /** * @param {string} a * @param {string} b * @return {string} */ var

Segment Tree Beats 学习笔记

99封情书 提交于 2020-03-12 05:24:24
例1 我们对一个区间 \([l,\ r]\) 维护它的最大值 \(mx\) ,以及 \(mx\) 的出现次数 \(cnt_mx\) ,和严格次大值 \(se\) 。并且维护区间和 \(sum\) 来计算答案。 对于 \(\forall\ l\ \leq\ i\ \leq\ r\ a_i\ =\ min(a_i,\ x)\) 操作时,如果 \(x\ \geq\ mx\) 则什么都不做,如果 \(x\ >\ se\) ,则修改 \(mx\) 和 \(sum\) 即可。否则递归下去。注意递归前要进行 push 操作,递归后要进行 pull 操作。 可以将每个节点的 \(mx\) 理解为对这个节点的子树内所有节点进行 \(min(a_i,\ mx)\) 的标记。复杂度 \(O(n\ log\ n)\) 。 代码 例2 由于对每个区间只有当 \(mx,\ mn\) 都存在时才能算贡献,不妨建两棵线段树。一棵线段树初始时 \(u_i\ =\ 0,\ d_i\ =\ 0\) ,另一棵 \(u_i\ =\ \infty,\ d_i\ =\ -\infty\) 。这样在一段区间可以算答案的时候暴力将第一棵树的对应节点赋值为第二棵线段树的对应节点。注意 pull 和 初始话 的时候 \(mx,\ mn,\ semx,\ semn\) 不能设为 \(0\) 而要设为 \(\infty,\ -\infty

ELK结合Beats工具的搭建使用(Metricbeat、Filebeat、Topbeat)

穿精又带淫゛_ 提交于 2020-03-08 18:36:30
ELK之间的合作机制: L (Logstash)作为信息收集者,主要是用来对日志的搜集、分析、过滤,支持大量的数据获取方式,一般工作方式为c/s架构,client端安装在需要收集日志的主机上,server端负责将收到的各节点日志进行过滤、修改等操作在一并发往elasticsearch上去。 E (Elasticsearch)作为数据的保存者,保存来自L(Logstash)收集的系统日志数据。 K (Kibana )作为展示者,主要是将ES上的数据通过页面可视化的形式展现出来。包括可以通过语句查询、安装插件对指标进行可视化等。 ELK架构图 ELK的工具 ELK新增了一个FileBeat,它是一个轻量级的日志收集处理工具(Agent),Filebeat占用资源少,适合于在各个服务器上搜集日志后传输给Logstash,官方也推荐此工具。 Filebeat隶属于Beats。目前Beats包含四种工具: 1 、Packetbeat(搜集网络流量数据) 2 、Topbeat(搜集系统、进程和文件系统级别的 CPU 和内存使用情况等数据) 3 、Filebeat(搜集文件数据) 4 、Winlogbeat(搜集 Windows 事件日志数据) Metricbeat 系统级监控。 用于从系统和服务收集指标。从 CPU 到内存,从 Redis 到 Nginx,Metricbeat