自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

口木西成

java后台 力扣牛客

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

原创 Java后端知识总结

害,马上要投日常实习了,希望能找到坑位。这些总结从2月以来反反复复,更新、修改、添加知识点,制作脑图,最后一股脑都拿出来,方便大家和本人查阅吧。后面绝对会继续更新!毕竟真正面试了,就知道痛点在哪儿。预计完善的内容包括 数据结构、大数据处理、设计模式、操作系统等。模块标题链接基础必知必会104187964基础三大集合104199039基础并发编程1...

2020-03-30 16:06:47 2252

原创 想刷题?不如从这67道题开始吧!

这篇是自己在牛客网上做的剑指Offer面试题的题解汇总,方便自己也方便进入到此链接的朋友查阅。目前还在搬运。题号题目题解链接1二维数组中的查找1043105382替换空格1043105553从尾到头打印链表1043105924重建二叉树1043106055用两个栈实现队列1043106196旋转数组的最小数字10432...

2020-02-22 11:49:49 199

原创 Java进阶-JVM内存机制

1. Java内存区域答:JVM中内存主要划分为5个区域,即方法区,堆内存,虚拟机栈,本地方法栈和程序计数器。1.1 方法区答:方法区是一个线程之间共享的区域,用于存储已被虚拟机加载的类信息。也被称为“永远代”,二者的关系类似接口和类的关系,即标准和实现。通过-XX:MaxPermSize控制上限。元空间替换方法区答:JDK1.8后,元空间代替了方法区。方法区本身由JVM设定固定的大小...

2020-02-13 12:59:42 388

原创 并查集

概述并查集是用来解决集合的合并和查找的数据结构。提供两个基本操作即find(int i):查找I所归属的集合,通常使用find(i)和find(j)判断i和j是否连通,即是否属于同一个集合。union(int i , int j):合并两个集合,操作后I所在集合和所有元素和J所在集合的所有元素都连通。每个方法的对应思路:初始化:用森林表示图的连通性,每个节点都有一个指针指向父节点。一开始各个节点都是单独的,所以指向自己。合并:让节点较少的树连接到较多的树下面,避免出现链式情况。连通分量–。

2020-05-12 21:25:52 189

原创 一文明白IO模型和常问多路复用机制

1. IO模型Socket的输入操作有两步。wait for data - 等待网络传输数据到达,到达后复制到内核缓冲区;copy data from kernel to user - 把数据从内核缓冲区复制到应用进程缓冲区。涉及到两个对象:process调用这个IO的进程/线程,kernel系统内核。1.1 同步阻塞IO用户线程发出请求后就一直被阻塞,直到数据到达并从内核缓冲区复...

2020-04-24 16:36:23 267

原创 双指针问题?so easy!

总纲双指针指在遍历过程中使用两个指针进行扫描达到目的。大致分为快慢指针(相同方向)和左右指针(相向方向)。值得一提的是,左右指针是很多算法的基础和搭配,如 归并排序、滑动窗口、字符匹配、单调栈等。快慢指针快慢指针一般解决链表问题。指针初始化指向 head,前进时 fast 在前,slow 在后,具体的步幅根据题目决定。题目举例题号题目难度141环形链表简单...

2020-04-04 23:22:47 197

原创 8字符串转换整数

题目描述请你来实现一个 atoi 函数,使其能将字符串转换成整数。首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。接下来的转化规则如下:如果第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字字符组合起来,形成一个有符号整数。假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成一个整数。该字符串在有效的整数部分之后也可能会存...

2020-04-03 21:46:53 230

原创 学算法,先从二分查找开始吧

总纲思路很简单,细节是魔鬼。分为三个常用场景:寻找一个数,寻找左侧边界,寻找右侧边界。最后给出力扣上的题目例子。基础框架int binarySearch(int[] nums, int target) { int left = 0, right = ...; while(...) { int mid = (right + left) / 2; ...

2020-04-02 13:46:32 113 1

原创 275H指数II

题目描述给定一位研究者论文被引用次数的数组(被引用次数是非负整数),数组已经按照升序排列。编写一个方法,计算出研究者的 h 指数。h 指数的定义: “h 代表“高引用次数”(high citations),一名科研人员的 h 指数是指他(她)的 (N 篇论文中)至多有 h 篇论文分别被引用了至少 h 次。(其余的 N - h 篇论文每篇被引用次数不多于 h 次。)"示例:输入: cita...

2020-04-02 11:40:16 196 1

原创 162寻找峰值

题目描述峰值元素是指其值大于左右相邻值的元素。给定一个输入数组 nums,其中 nums[i] ≠ nums[i+1],找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回任何一个峰值所在位置即可。你可以假设 nums[-1] = nums[n] = -∞。说明:你的解法应该是 O(logN) 时间复杂度的。思路分析O(N)。遍历所有元素,找到max或者找到大于前后...

2020-04-02 11:39:48 100

原创 154寻找旋转排序数组中的最小值II

题目描述假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。请找出其中最小的元素。注意数组中可能存在重复的元素。思路分析很明显,看出本题与153差别在数组中存在重复数组,需要处理 mid 和 right 元素相同的情况。我们要得到的是min。假设right是min,分为唯一min和不唯一m...

2020-04-02 11:38:59 120

原创 153寻找旋转排序数组中的最小值

题目描述假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。请找出其中最小的元素。你可以假设数组中不存在重复元素。思路分析二分的找左边区间。套模板。代码实现 public int findMin(int[] nums) { if (nums == null || n...

2020-04-02 11:38:16 88

原创 35搜索插入位置

题目描述给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。思路分析打板题。因为目标值不存在数组还得返回插入的位置,即返回left,找第一个大于此元素的下标。代码实现 public int searchInsert(int[] nums, int target) { i...

2020-04-02 11:37:24 86

原创 33搜索旋转排序数组

题目描述假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。你可以假设数组中不存在重复的元素。你的算法时间复杂度必须是 O(log n) 级别。思路分析时间复杂度logn,加上部分有序用二分。两次二分。一...

2020-04-02 11:36:52 90

原创 704二分查找

题目描述给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。提示:你可以假设 nums 中的所有元素是不重复的。n 将在 [1, 10000]之间。nums 的每个元素都将在 [-9999, 9999]之间。思路分析最基础的二分查找。在不重复的数组中找到目标数。...

2020-04-02 11:35:34 98

原创 289生命游戏

题目描述根据 百度百科 ,生命游戏,简称为生命,是英国数学家约翰·何顿·康威在 1970 年发明的细胞自动机。给定一个包含 m × n 个格子的面板,每一个格子都可以看成是一个细胞。每个细胞都具有一个初始状态:1 即为活细胞(live),或 0 即为死细胞(dead)。每个细胞与其八个相邻位置(水平,垂直,对角线)的细胞都遵循以下四条生存定律:如果活细胞周围八个位置的活细胞数少于两个,则该...

2020-04-02 11:27:33 145

原创 1111有效括号的嵌套深度

题目描述有效括号字符串 仅由 “(” 和 “)” 构成,并符合下述几个条件之一:空字符串连接,可以记作 AB(A 与 B 连接),其中 A 和 B 都是有效括号字符串嵌套,可以记作 (A),其中 A 是有效括号字符串类似地,我们可以定义任意有效括号字符串 s 的 嵌套深度 depth(S):s 为空时,depth("") = 0s 为 A 与 B 连接时,depth(A + B...

2020-04-01 10:24:12 117

原创 912排序数组

题目描述给一个整数数组nums,将该数组升序排列。提示1 <= nums.length <= 5000050000 <= nums[i] <= 5000思路分析力扣官方给大家提醒,要掌握各种排序方法。冒泡。从左到右依次比较相邻元素,前大于后则交换,每次冒泡保证最后一个元素是当前最大,再遍历前 n-1 个元素。选择。找出前 n 个元素中max,与最后一个...

2020-03-31 10:43:46 256

原创 Java框架-SpringBoot

1. 概述1.1 是什么答:SpringBoot是Spring组件的一站式解决方案,并不是独立框架,是用来简化Spring配置,提供各种启动器,让开发者能快速上手的。1.2 优点容易上手,开箱即用,提升开发效率;能和Spring生态系统集成;遵循默认配置,提供了一系列通用的非业务性功能;内置http服务器,如tomcat、jetty,开发web应用更加轻松;maven配置直接写入...

2020-03-30 15:59:02 671

原创 常用工具-Git

1. 版本控制VCS答:版本控制是用来记录文件内容变化,便于将来查阅特定版本修订情况的系统。1.1 必要性答:在团队协作时,能将文件/项目回溯到某一版本,还能查看是谁修改了代码,从而找到锅在谁那。1.2 分类1.2.1 本地版本控制复制整个项目目录,手动增加版本号;本地数据库记录更新。1.2.2 集中式版本控制一个集中管理的服务器,所有成员通过访问此服务器获得最新文件或者提...

2020-03-30 15:50:23 339

原创 消息队列-通用知识

1. 消息队列1.1 优缺点优点/使用场景:解耦。生产消息后直接给MQ,不用关心其他事务,监听返回消息就行。异步。异步执行,提高吞吐量。发送者将消息给MQ后,不需要同步等待处理完毕,而是可以进行其它操作。削峰。请求放在MQ里,Server根据处理能力处理消息,缓解服务器压力,不至于GG。缺点:系统可用性降低。MQ挂了,整个系统通信GG。系统复杂度增加。加入MQ,引出一致性、传...

2020-03-30 15:39:42 363

原创 67剪绳子

题目描述给你一根长度为n的绳子,请把绳子剪成整数长的m段(m、n都是整数,n>1并且m>1),每段绳子的长度记为k[0],k[1],…,k[m]。请问k[0] * k[1] * …* k[m]可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。输入8输出18思路分析背包型动态规划转换问题为: 绳子的长...

2020-03-30 11:40:00 338

原创 剑指62圆圈中最后剩下的数字

题目描述0,1,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字。求出这个圆圈里剩下的最后一个数字。例如,0、1、2、3、4这5个数字组成一个圆圈,从数字0开始每次删除第3个数字,则删除的前4个数字依次是2、0、4、1,因此最后剩下的数字是3。示例 1:输入: n = 5, m = 3输出: 3示例 2:输入: n = 10, m = 17输出: 2...

2020-03-30 09:47:20 231

原创 1162地图分析

题目描述你现在手里有一份大小为 N x N 的『地图』(网格) grid,上面的每个『区域』(单元格)都用 0 和 1 标记好了。其中 0 代表海洋,1 代表陆地,你知道距离陆地区域最远的海洋区域是是哪一个吗?请返回该海洋区域到离它最近的陆地区域的距离。我们这里说的距离是『曼哈顿距离』( Manhattan Distance):(x0, y0) 和 (x1, y1) 这两个区域之间的距离是 |...

2020-03-29 12:27:21 139

原创 337打家劫舍3

题目描述在上次打劫完一条街道之后和一圈房屋后,小偷又发现了一个新的可行窃的地区。这个地区只有一个入口,我们称之为“根”。 除了“根”之外,每栋房子有且只有一个“父“房子与之相连。一番侦察之后,聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”。 如果两个直接相连的房子在同一天晚上被打劫,房屋将自动报警。计算在不触动警报的情况下,小偷一晚能够盗取的最高金额。思路分析状态:树的每一个...

2020-03-26 13:29:14 129

原创 55跳跃游戏

题目描述给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个位置。示例 1:输入: [2,3,1,1,4]输出: true解释: 我们可以先跳 1 步,从位置 0 到达 位置 1, 然后再从位置 1 跳 3 步到达最后一个位置。示例 2:输入: [3,2,1,0,4]输出: fals...

2020-03-26 13:28:03 95

原创 120三角形最小路径和

题目描述给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。例如,给定三角形:[[2],[3,4],[6,5,7],[4,1,8,3]]自顶向下的最小路径和为 11(即,2 + 3 + 5 + 1 = 11)。说明:如果你可以只使用 O(n) 的额外空间(n 为三角形的总行数)来解决这个问题,那么你的算法会很加分。思路分析状态:索引号。选...

2020-03-24 15:59:31 89

原创 746使用最小花费爬楼梯

题目描述数组的每个索引做为一个阶梯,第 i个阶梯对应着一个非负数的体力花费值 costi。每当你爬上一个阶梯你都要花费对应的体力花费值,然后你可以选择继续爬一个阶梯或者爬两个阶梯。您需要找到达到楼层顶部的最低花费。在开始时,你可以选择从索引为 0 或 1 的元素作为初始阶梯。示例 1:输入: cost = [10, 15, 20]输出: 15解释: 最低花费是从cost[1]开始,...

2020-03-24 15:56:53 73

原创 56合并区间

题目描述给出一个区间的集合,请合并所有重叠的区间。示例 1:输入: [[1,3],[2,6],[8,10],[15,18]]输出: [[1,6],[8,10],[15,18]]解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].示例 2:输入: [[1,4],[4,5]]输出: [[1,5]]解释: 区间 [1,4] 和 [4,5] 可被视为重...

2020-03-22 12:48:57 95

原创 17电话号码的字母组合

题目描述给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例:输入:“23”输出:[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”].思路分析本质上还是回溯的排列组合问题,区别是加了层循环和数组的提前处理。拿23举例,相当于先找到2的...

2020-03-22 12:46:29 96

原创 区间调度-重叠-会议室问题

基础思路这类问题都是让你算出给出的区间里有多少个互不相交的区间个数。思路是每次选择结束时间最早的。将区间按结束时间排序,选择第一个区间的结束时间做标准;只要后续区间的开始时间小于这个结束时间,就认为相交;区间的开始时间大于这个结束时间,认为不相交,并更新结束时间。举例无重叠区间 leetcode 435题目描述给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠...

2020-03-18 11:28:23 328

原创 小和问题和逆序对问题

题目描述在一个数组中,每一个数左边比当前数小的数累加起来,叫做这个数组的小和。求一个数组的小和。例如:对于数组[1,3,4,2,5]1左边比1小的数,没有;3左边比3小的数,1;4左边比4小的数,1、3;2左边比2小的数,1;5左边比5小的数,1、3、4、2;所以小和为1+1+3+1+1+3+4+2=16算法思想归并排序。在归并算法的基础上做略微改动,即merge中添加了变量r...

2020-03-14 14:30:20 1690 1

原创 海量数据处理

1. 容量计算解决海量数据问题前,先对数据的容量进行计算。1 byte = 8 bit1 KB = 2^10 byte = 1024 byte ≈ 10^3 byte1 MB = 2^20 byte ≈ 10^6 byte1 GB = 2^30 byte ≈ 10^9 byte1 亿 = 10^81 个int整数占 4 byte,1 亿个整数占 4*108 byte ≈ 400 M...

2020-03-13 23:28:51 105

原创 5最长回文子串

题目描述给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: “babad”输出: “bab”注意: “aba” 也是一个有效答案。示例 2:输入: “cbbd”输出: “bb”思路分析回文串问题的核心是,从中间向两边扩散来判断回文串。每次传入left和right两个指针,所指元素相同就left- -,right++,直到...

2020-03-12 15:10:01 116

原创 22括号生成

题目描述给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。例如,给出 n = 3,生成结果为:[“((()))”,“(()())”,“(())()”,“()(())”,“()()()”]思路分析暴力解决:先生成所有序列,再对序列进行有效判断。回溯:dfs+剪枝。路径:已经加入的左右括号。选择列...

2020-03-11 11:23:49 107

原创 39组合总和

题目描述给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的数字可以无限制重复被选取。说明:所有数字(包括 target)都是正整数。解集不能包含重复的组合。示例 1:输入: candidates = [2,3,6,7], target = 7,所求解集...

2020-03-11 11:23:07 124

原创 消息队列-RabbitMQ

1. 消息队列1.1 优缺点答:总结为:优点:解耦。系统生产消息后,直接给MQ不用关心其他事务。异步。异步执行,提高吞吐量。发送者将消息发送给消息队列后,不需要同步等待接收者处理完毕,而是可以进行其它操作。削峰。请求在MQ中,Server根据处理能力处理消息,缓解服务器压力。缺点:系统可用性降低。MQ挂了,整个系统通信GG。系统复杂度增加。加入MQ,引出一致性、传输可靠性、...

2020-03-10 14:31:43 457

原创 236二叉树的最近公共节点

题目描述给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”示例 1:输入: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1输出: 3解释:...

2020-03-10 14:17:04 117

原创 79单词搜索

题目描述给定一个二维网格和一个单词,找出该单词是否存在于网格中。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。示例:board =[[‘A’,‘B’,‘C’,‘E’],[‘S’,‘F’,‘C’,‘S’],[‘A’,‘D’,‘E’,‘E’]]给定 word = “ABCCED”, 返...

2020-03-10 14:14:14 72

原创 回溯算法问题

基本解法回溯问题,其实就是一个决策树遍历。要考虑三个问题。路径:已做出的选择。选择列表:当前能做的选择。结束条件:到达决策树的叶子节点,不能选择时。其实回溯问题可以理解为动规的暴力解法,而且是没有重叠子问题的动规。result = []public void backtrack(路径, 选择列表): if 满足结束条件 result.add(路径); ...

2020-03-09 13:42:12 524

空空如也

空空如也

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

TA关注的人

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