自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

笑忘哭的博客

路痴的救赎

  • 博客(107)
  • 收藏
  • 关注

原创 【画图分析】Leetcode 201 题 数字范围按位与(标签:位运算)

文章目录题目描述思路分析技术公众号:小猿君的算法笔记题目描述给定范围 [m, n],其中 0 <= m <= n <= 2147483647,返回此范围内所有数字的按位与(包含 m, n 两端点)。示例1:输入:[5,7]输出:4示例2:输入:[0,1]输出:0思路分析按照题目的要求,如果逐个按位与,那么在 m 、n 范围较大的情况下,将会出现超时。对题目中所给用例 [5,7] 按位与运算:1、可以看到,5 和 7 二进制形式存在公共前缀 01 ,因此从 5 →

2021-02-27 21:29:28 290 1

原创 查找服务器中 nginx 所使用的 nginx.conf 配置文件位置

一般情况下,可以使用 nginx -t 命令查看 nginx.conf 所在位置。# nginx -tnginx: the configuration file /etc/nginx/nginx.conf syntax is oknginx: configuration file /etc/nginx/nginx.conf test is successful如果 nginx 命令无法直接执行,我们可以通过一些方式查找 :ps -ef | grep nginxroot 3235 1

2021-02-24 20:07:33 7087

原创 【思路分析】Leetcode 111 题 二叉树的最小深度(标签:树、深度优先搜索)

题目描述给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。说明:叶子节点是指没有子节点的节点。示例 :输入:root = [3,9,20,null,null,15,7]输出:2思路分析① 保存一个全局遍历 min 作为最小深度。② 搜索叶子节点,将该节点的深度 level 与 min 比较,取较小者。代码描述使用 Java 进行代码描述:class Solution { i

2021-02-13 14:03:20 655 5

原创 Leetcode 107 题 二叉树的层序遍历 II(标签:树、深度优先搜索)

给定一个二叉树,返回其节点值自底向上的层序遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)例如:给定二叉树 [3,9,20,null,null,15,7],

2021-02-13 13:47:35 197 2

原创 Leetcode 101 题 对称二叉树

给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。

2021-02-10 23:11:35 125

原创 Leetcode 191 题 位 1 的个数

题目描述编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为汉明重量)。思路分析方法一、计算每一位是否为 1显然,我们可以通过判断数中每一位是否为 1 求得位 1 的个数。① 获得最低位是否为 1,通过 n & 1,若结果为 1 ,说明最低位为 1,否则最低位为 0。② 通过位移更新最低位, n >>= 1,移位 32 次后,n 中的每一位都会被获得。publi

2021-02-09 12:17:59 139

原创 Leetcode 206 题 反转链表

文章目录题目描述思路分析技术公众号:小猿君的算法笔记题目描述反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL思路分析「原地逆置」利用三指针 pre、cur 和 next 三个连续的指针,分别指向前一个节点、当前节点以及当前节点的下一个节点。在原地进行逆置,cur.next = pre,那么 cur 就会和后面的节点开连接,为了避免这一问题,需要使用 next 指

2021-02-05 22:44:52 168

原创 Leetcode 207 题 课程表

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

2021-02-05 22:34:44 277

原创 Leetcode 100 题 相同的树

文章目录题目描述思路分析代码描述技术公众号:小猿君的算法笔记题目描述给定两个二叉树,编写一个函数来检验它们是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。示例:输入:输出:true思路分析通过递归对二叉树各个节点进行比较,以判断两棵树是否相同。判断递归的返回条件:1、如果两个节点都为空,说明比较到了尽头,返回 true。2、如果一个节点为空,另一个节点不为空,两节点不同,返回 false。3、如果左右子树都相同,返回 true,否则返回 false。

2021-01-31 15:49:41 160

原创 Leetcode 213 题 打家劫舍 II

题目描述你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 ,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警 。给定一个代表每个房屋存放金额的非负整数数组,计算你 在不触动警报装置的情况下 ,能够偷窃到的最高金额。示例:输入:nums = [2,3,2]输出:3解释:你不能先偷窃 1 号房屋(金额 = 2),然后偷窃 3 号房屋(金额 = 2), 因为他们是相

2021-01-30 18:37:55 154

原创 Leetcode 190 题 颠倒二进制位

题目描述颠倒给定的 32 位无符号整数的二进制位。示例:输入:00000010100101000001111010011100输出:00111001011110000010100101000000解释:输入的二进制串 00000010100101000001111010011100 表示无符号整数 43261596,因此返回 964176192,其二进制表示形式为 00111001011110000010100101000000。思路分析1、对二进制数进行翻转,类似于整数翻转,需要先获得二进

2021-01-27 23:43:56 156

原创 Leetcode 199 题 二叉树的右视图

题目描述给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。示例:输入:[1,2,3,null,5,null,4]输出:[1, 3, 4]解释:思路分析显然,我们需要获得每层最右边的元素,加入到结果集中。「广度优先搜索」层序遍历,按照从右到左的顺序访问节点,每层第一次被访问的元素即为最右边元素。class Solution { public List<Integer> rightSideView(TreeNode root)

2021-01-27 23:37:13 114

原创 Leetcode 203 题 移除链表元素(标签:链表)

题目描述删除链表中等于给定值 val 的所有节点。示例:输入:1->2->6->3->4->5->6, val = 6输出:1->2->3->4->5思路分析「使用双指针」为了方便处理,可以利用哑节点记录表头节点。使用双指针 pre 和 cur 分别指向上一个节点和当前节点。如果当前节点为需要被删除的目标节点,那么上一个节点的指针就要指向当前节点的下一个节点。class Solution { public ListN

2021-01-23 15:34:32 212

原创 Leetcode 134 题 加油站(标签:贪心算法)

题目描述在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 gas[i] 升。你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。如果你可以绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1。说明:如果题目有解,该答案即为唯一答案。输入数组均为非空数组,且长度相同。输入数组中的元素均为非负数。示例:输入:gas = [1,2,3,4,5]cost = [3,4,5,1,2]输

2021-01-19 22:02:57 293

原创 X-Forwarded-For 客户端 IP 伪造过程及防范

最近收到一条安全漏洞报告,通过利用代码漏洞,并结合HTTP扩展请求头 X-Forwarded-For 可以对客户端IP进行伪造,以达到非法目的。下面我将对这个漏洞进行介绍。X-Forwarded-For 介绍X-Forwarded-For 是一个 HTTP 扩展头部,用来表示HTTP请求端真实 IP,HTTP/1.1 协议并没有对它的定义,但现如今X-Forwarded-For已被各大 HTTP 代理、负载均衡等转发服务广泛使用。X-Forwarded-For 请求头格式:X-Forwarded-

2021-01-18 22:27:51 6831 2

原创 Leetcode 540 题 有序数组中的单一元素

题目描述给定一个只包含整数的有序数组,每个元素都会出现两次,唯有一个数只会出现一次,找出这个数。示例:输入: [1,1,2,3,3,4,4,8,8]输出: 2注意: 您的方案应该在 O(log n)时间复杂度和 O(1)空间复杂度中运行。思路分析「思路一」由于每个元素都会出现两次,寻找只出现一次的元素,我们可以想到的是使用异或,我们可以利用异或的特性,相同为0,那么出现两次的结果都会被异或为0,剩下的那一位就是我们需要的结果。「思路二」到目前为止,题目所给的有序数组这一条件我们似乎并没

2021-01-14 23:31:50 418

原创 Leetcode 354 题 俄罗斯套娃信封问题

题目描述给定一些标记了宽度和高度的信封,宽度和高度以整数对形式 (w, h) 出现。当另一个信封的宽度和高度都比这个信封大的时候,这个信封就可以放进另一个信封里,如同俄罗斯套娃一样。请计算最多能有多少个信封能组成一组“俄罗斯套娃”信封(即可以把一个信封放到另一个信封里面)。说明:不允许旋转信封。示例:输入: envelopes = [[5,4],[6,4],[6,7],[2,3]]输出: 3解释: 最多信封的个数为 3, 组合为: [2,3] => [5,4] => [6,7]。

2021-01-11 22:33:29 462

原创 Leetcode 300 题 最长递增子序列

题目描述给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。示例:输入:nums = [10,9,2,5,3,7,101,18]输出:4解释:最长递增子序列是 [2,3,7,101],因此长度为 4 。思路分析这道题求最长上升子序列,我们可以定义一个 dp 数组,dp[i] 表示以 nums[i] 为最后一个元素时,最长上

2021-01-09 18:52:03 5012 1

原创 Leetcode 452 题 用最少数量的箭引爆气球

题目描述在二维空间中有许多球形的气球。对于每个气球,提供的输入是水平方向上,气球直径的开始和结束坐标。由于它是水平的,所以纵坐标并不重要,因此只要知道开始和结束的横坐标就足够了。开始坐标总是小于结束坐标。一支弓箭可以沿着 x 轴从不同点完全垂直地射出。在坐标 x 处射出一支箭,若有一个气球的直径的开始和结束坐标为 xstart,xend, 且满足 xstart ≤ x ≤ xend,则该气球会被引爆。可以射出的弓箭的数量没有限制。弓箭一旦被射出之后,可以无限地前进。我们想找到使得所有气球全部被引爆,所

2021-01-07 12:37:02 245

原创 Leetcode 417 题 太平洋大西洋水流问题

题目描述给定一个 m x n 的非负整数矩阵来表示一片大陆上各个单元格的高度。“太平洋”处于大陆的左边界和上边界,而“大西洋”处于大陆的右边界和下边界。规定水流只能按照上、下、左、右四个方向流动,且只能从高到低或者在同等高度上流动。请找出那些水流既可以流动到“太平洋”,又能流动到“大西洋”的陆地单元的坐标。示例:给定下面的 5x5 矩阵:返回:[[0, 4], [1, 3], [1, 4], [2, 2], [3, 0], [3, 1], [4, 0]] (上图中带括号的单元)。思路分析

2021-01-02 14:38:26 509

原创 一颗小球的畅想 v1.1 弹球游戏的设计与实现(Java)

在之前的文章中,我对一颗小球的畅想 v1.0 版本进行了实现,详细点击这里:一颗小球的畅想 v1.0,在 v1.0 版本中,实现了弹球游戏的基本功能需求,在文章的末尾,我也留了些坑,打算有时间慢慢填,本章将继续对 v1.0 版本功能上进行增强,这个版本暂且定为 v1.1。1、游戏运行效果图首先上图,查看运行效果。程序模块划分如下Constant 类:用于存放游戏中的常量数据Ball 类:球类GameView 类:游戏视图类Racket 类:球拍类Rule 类:游戏规则类Game

2020-12-31 12:42:18 669 2

原创 Leetcode 200 题 岛屿数量

题目描述给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。

2020-12-28 12:08:10 1197

原创 Leetcode 583 题 两个字符串的删除操作

题目来源:https://leetcode-cn.com/problems/delete-operation-for-two-strings/题目描述给定两个单词 word1 和 word2,找到使得 word1 和 word2 相同所需的最小步数,每步可以删除任意一个字符串中的一个字符。示例:输入: “sea”, “eat”输出: 2解释: 第一步将"sea"变为"ea",第二步将"eat"变为"ea"思路分析这道题给我们两个字符串,要求删除最少次数,使得最后剩下的两个字符串相同。也就

2020-12-26 12:11:59 269

原创 Leetcode 1143 题 最长公共子序列

题目描述给定两个字符串 text1 和 text2,返回这两个字符串的最长公共子序列的长度。一个字符串的子序列是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。例如,“ace” 是 “abcde” 的子序列,但 “aec” 不是 “abcde” 的子序列。两个字符串的「公共子序列」是这两个字符串所共同拥有的子序列。

2020-12-24 12:17:54 219

原创 Leetcode 1370 题 上升下降字符串

题目描述给你一个字符串 s ,请你根据下面的算法重新构造字符串:从 s 中选出最小的字符,将它接在结果字符串的后面。从 s 剩余字符中选出最小的字符,且该字符比上一个添加的字符大,将它接在结果字符串后面。重复步骤 2 ,直到你没法从 s 中选择字符。从 s 中选出最大的字符,将它接在结果字符串的后面。

2020-12-22 23:20:43 122

原创 Linux使用netstat命令

netstat命令介绍netstat命令可以获取Linux系统网络相关数据,用于对网络相关问题的排查。netstat输出介绍netstat输出列名介绍如下:Proto:协议(TCP协议或者UDP协议)Recv-Q:接收队列,连接此套接字的用户程序未拷贝的字节数Send-Q:发送队列,远程主机未确认字节数Local Address:本地地址及端口号Foreign Address:远程地址及端口号State:链路状态PID/Program name:进程ID和使用该套接字的应用程序

2020-10-17 20:50:47 338

原创 Linux使用rz、sz命令进行文件上传下载

命令的安装rz和sz命令可以让我们很方便的将文件在本地和服务器之间上传和下载。我所使用的阿里云服务器,系统是Ubuntu系统,当输入rz命令,系统将出现以下提示。很明显,我们需要根据提示安装lrzsz。sudo apt-get updatesudo apt-get install lrzsz使用rz命令进行文件上传使用xshell登录服务器,当我们输入rz命令,系统将会出现弹框,我们选择需要上传的文件进行上传即可。使用sz命令进行文件下载使用xshell登录服务器,输入sz

2020-06-27 01:02:02 426

原创 MongoDB之Spring Data MongoDB

这里创建springboot工程,使用spring data mongodb,首先需要创建工程,引入坐标。<dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-mongodb</artifactId> <version>2.1.8.RELEASE</version></dependency&

2020-06-26 19:43:20 9064

原创 MongoDB之基本使用

MongoDB简介MongoDB是为了快速开发互联网Web应用而设计的数据库系统。MongoDB的设计目标是极简、灵活、作为Web应用栈的一部分。MongoDB的数据抹香香是面向文档的,所谓文档是一种类似于JSON的结构,简单理解MongoDB这个数据库中存的是各种各样的JSON(BSON)。下载安装MongoDB(Ubuntu)安装MongoDBsudo apt-get install mongodb查看MongoDB版本mongo -version连接MongoDBmo

2020-06-26 19:25:30 148

原创 Java并发编程之AQS原理

AQS框架基本特性与结构Java并发包当中的大多数同步器实现都是围绕着共同的基础行为,比如等待队列、独占获取、共享获取等,而这个行为的抽象就是基于AbstractQueuedSynchronize简称AQS。AQS是一个抽象同步框架,可以用来实现一个依赖状态的同步器。AQS核心AQS核心有三点:自旋:控制线程不跳出逻辑LockSupport类中有park(线程阻塞)、unpark...

2019-12-03 16:24:26 275

原创 Spring之Bean的生命周期

什么是Bean的生命周期Bean的生命周期指的是Bean创建→初始化→销毁的过程我们可以自定义Bean初始化和销毁方法容器在Bean进行到当前生命周期的时候,来调用自定义的初始化和销毁方法。初始化与销毁——自定义方法我们创建一个Bike类public class Bike { public Bike() { System.out.println("Bike 构造方法");...

2019-12-03 16:01:08 165

原创 Spring之Bean的加载方法

@Configuration该注解作用在类上,告诉Spring这是一个配置类,与XML效果是一样的,我们接下来所使用的注解,需要在配置类中使用。ApplicationContext ac = new AnnotationConfigApplicationContext(MainConfig.class);@Bean将@Bean放在方法上使用,能够将Bean加入到IOC容器中,其返回...

2019-12-03 15:56:02 1056

原创 设计模式之责任链模式

什么是责任链模式责任链设计模式主要构成有抽象处理者、具体处理者、客户类,在处理请求的时候,将请求通过客户类发送至处理链路上,这样链路上所有处理对象都有机会处理请求,使发送者与接收者之间解耦。使用场景当请求到来时,不知道由哪个具体对象去处理或者每个对象都需要处理请求的时候,可以使用责任链模式。比如在论坛发表一篇文章,后台需要经过一系列处理(过滤、敏感词等)才可以发表或进入数据库,这时...

2019-12-03 15:27:45 181

原创 设计模式之观察者模式

观察者模式:对象之间多对一依赖的一种设计方案,被依赖的对象为Subject,依赖的对象为Observer,Subject通知Observer变化。观察者模式包含四个角色:抽象主题(Subject)、具体主题、抽象观察者(Observer)、具体观察者观察者模式的实现我们创建一个彩票的主题,以购彩者作为观察者,向彩票主题进行注册,而彩票主题则向购彩者进行通知,来实现观察者模式。下面是一个...

2019-12-03 15:19:27 127

原创 Java基础之内省机制

内省机制Java中提供了一套API用来访问某个属性的getter/setter方法,这些API存放与包java.beans中,一般的做法是通过类Introspector的getBeanInfo方法来获取摸个对象的BeanInfo信息,然后通过BeanInfo来获取属性的描述器(PropertyDescriptor),通过这个属性描述器就可以获取某个属性对应的getter/setter方法,然后...

2019-12-03 15:09:43 217

原创 MySQL之分组函数

分组函数分组函数是对表中的一组记录进行操作,每组返回一个结果。分组函数一共5个COUNT  求总数SUM    求总和AVG     求平均数MAX    求最大数MIN     求最小数分组函数的特点分组函数自动忽略NULL,例如下面的查询SELECT COUNT(time) FROM act_user;如果time中存在NULL字段,那么分组函数自动忽略。...

2019-10-19 11:38:14 799

原创 Redis的虚拟内存

应用场景对于大多数数据库而言,最好的运行方式就是讲所有数据都加载到内存中,之后的查询操作完全基于内存数据来实现,但这在实际的情况下并不多见,多数情况下只有部分数据可以被加载到内存中,在Redis中,有一个重要的概念,那就是key一般不会被交换,如果你的数据库中存在大量key,那么这种场景就不适合使用虚拟内存,如果恰恰相反,你的数据库中只包含少量key,而每一个key所包含的value很大,那么...

2019-08-29 21:51:16 759

原创 Java8新特性之方法引用

方法引用前面讲过Lambda表达式,而方法引用是Lambda表达式的一种特殊情况,或者说,是Lambda表达式的一种语法糖。方法引用的分类方法引用可以分为4类:1、类名::静态方法名2、引用名(对象名)::实例方法名3、类名::实例方法名4、构造方法引用:类名::new类名::静态方法名测试自定义学生类public class Student{ private...

2019-07-08 12:50:11 302

原创 Java8新特性之java.util.function包下的函数式接口

Function接口Function接口,是函数式接口,在用户实际使用的时候可以传递任意的操作给该函数,它可以用来传递行为。对于 Function<T,R>的参数,其表示传入T类型的对象,返回R类型的对象。public class FunctionTest{ public int compute(int a, Function<Integer,Intege...

2019-07-07 17:41:20 1314

原创 Java8新特性之Lambda表达式

为什么需要Lambda表达式在Java中,我们无法将函数作为参数传递给一个方法,也无法声明返回一个函数方法。Lambda表达式为Java添加了缺失的函数式编程的特性,使我们能将函数当做一等公民看待,在Java中,Lambda表达式是对象,他们必须依附于一类特别的对象类型——函数式接口。下面是一个普通的Swing程序使用匿名内部类与Lambda的写法 JFrame jFrame=new J...

2019-07-05 10:47:21 699

空空如也

空空如也

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

TA关注的人

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