自定义博客皮肤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学习

静下心来学习...

  • 博客(329)
  • 资源 (8)
  • 收藏
  • 关注

原创 【搞定算法】需要排序的最短子数组长度

题目:给定一个无序数组 arr,求出需要排序的最短子数组长度。例如:arr = [1,5,3,4,2,6,7] 返回 4,因为只有 [5,3,4,2] 需要排序。要求:时间复杂度 O(N)、额外空间复杂度O(1)。假设数组为 [a b c d e f g h i j k l m n],如果 abc 是有序的,mn是 有序的,至于中间的 defghijkl 是无序的,我们可以得知,如果...

2019-07-25 15:16:19 1326

原创 【搞定算法】最长的可整合子数组的长度

题目:最长的可整合子数组的长度。给定一个整型数组 arr,请返回其中最大可整合子数组的长度。例如:[5,5,3,2,6,4,3] 的最大可整合子数组为[5,3,2,6,4],所以返回 5。先给出可整合数组的定义:如果一个数组在排序之后,每相邻两个数差的绝对值都为 1,则该数组为可整合数组。例如:[5,3,4,6,2] 排序之后为 [2,3,4,5,6],符合每相邻两个数差的绝对值都为 1,所...

2019-07-25 14:41:51 1127

原创 【搞定算法】找出数组中出现次数大于数组长度一半和 N/K 的数

博主秋招提前批已拿百度、字节跳动、拼多多、顺丰等公司的offer,可加微信:pcwl_Java 一起交流秋招面试经验。目 录:1、找出数组中出现次数大于数组长度一半的数2、找出数组中出现次数大于数组长度 N/K 的数1、找出数组中出现次数大于数组长度一半的数一个数组中出现次数大于数组长度一般的数显然最多只有一个。题目:在数组中找到出现次数大于数组长度一半的数。...

2019-07-25 14:18:55 4982 7

原创 【左神算法】一种接收消息并按顺序打印的结构设计

题目:一种消息接收并打印的结构设计:已知一个消息流会不断地吐出整数 1 ~ N,但不一定按照顺序吐出。如果上次打印的数为i,那么当 i + 1 出现时,请打印 i + 1 及其之后接收过的并且连续的所有数,直到 1 ~ N 全部接收并打印完,请设计这种接收并打印的结构。例如:消息流吐出 2,一种结构接收而不打印 2,因为 1 还没出现;消息流吐出 1,一种结构接收 1,并且打印:1,2。...

2019-07-24 12:27:43 693

原创 【左神算法】给定一个数字组成的字符串,返回有多少种合法的 IPV4 组合

题目:给定一个数字组成的字符串 str,返回有多少种合法的 IPV4组合。举例:str = “245111”,只有一种合法 IPV4组合:245.1.1.1,所以返回 1str = “11111”,所有合法的 IPV4组合为:1.1.1.111.1.11.11.11.1.111.1.1.1所以返回 4str = “100111”,所有合法的 IPV4组合为:100...

2019-07-24 11:47:40 1860 3

原创 【搞定算法】Morris 遍历二叉树:前序、中序、后序

目 录:1、Morris 遍历的基本概念2、Morris 的前序遍历3、Morris 的中序遍历4、Morris 的后序遍历其实之前的文章里已经记录了二叉树的递归/非递归遍历代码实现。但是由于 Morris 遍历可以实现最优的遍历方式,这无疑是在面试时遇到此问题非常加分的回答。1、Morris 遍历的基本概念Morris 遍历:时间复杂度 O(N)、额外空间复杂度 ...

2019-07-23 11:50:08 833 1

原创 【搞定算法】单调栈问题:直方图中的最大矩形面积、求最大子矩阵的大小、可见山峰问题

目 录:1、单调栈结构1.1、单调栈结构的实现:无重复元素1.2、单调栈结构的实现:有重复元素2、单调栈结构的应用2.1、直方图中的最大矩形面积2.2、求最大子矩阵的大小2.3、可见山峰问题本文主要用于讲解一种在面试笔试中经常使用到的一种算法结构:单调栈结构。1、单调栈结构单调栈结构:给一个数组,求任何位置左边和右边离它最近的比它大/小的数。要求:栈...

2019-07-22 15:57:29 2821 1

原创 【搞定算法】字符串的翻转和旋转及其应用

目 录:一、字符串的翻转1、StringBuilder 实现2、双指针实现3、字符串翻转应用二、字符串的旋转1、三步翻转实现旋转【重点】2、String 的 substring 方法实现面试和笔试中我们也经常遇到字符串相关的翻转和旋转的题目。本文就对字符串的翻转和旋转做个简单的用法总结。一、字符串的翻转1、StringBuilder 实现可以直接利用 S...

2019-07-21 16:02:42 726 1

原创 【搞定算法】滑动窗口问题:窗口内最大值、最小值的更新结构

目 录:1、滑动窗口2、滑动窗口的应用2.1、生成窗口最大值数组 2.2、求一个数组中最大值减去最小值小于或等于 num 的子数组数量(要求O(N))1、滑动窗口生成窗口的最大值或者最小值数组,时间复杂度:O(N)。可阅读:https://www.cnblogs.com/haozhengfei/p/a14049ec0869a8125a69f3af37471c77.htm...

2019-07-18 15:34:19 3573

原创 【LeetCode】第25题:K 个一组翻转链表(字节跳动面试题)

LeetCode 链接:https://leetcode-cn.com/problems/reverse-nodes-in-k-group/题目:给你一个链表,每k个节点一组进行翻转,请你返回翻转后的链表。k是一个正整数,它的值小于或等于链表的长度。如果节点总数不是k的整数倍,那么请将最后剩余的节点保持原有顺序。示例 :给定这个链表:1->2->3->4-...

2019-07-17 10:40:17 1428

原创 【LeetCode】第697题:数组的度(字节跳动面试题)

题目:给定一个非空且只包含非负数的整数数组nums, 数组的度的定义是指数组里任一元素出现频数的最大值。你的任务是找到与nums拥有相同大小的度的最短连续子数组,返回其长度。示例 1:输入: [1, 2, 2, 3, 1]输出: 2解释:输入数组的度是2,因为元素1和2的出现频数最大,均为2.连续子数组里面拥有相同度的有如下所示:[1, 2, 2, 3, 1], [1, ...

2019-07-16 17:25:56 1440

原创 【LeetCode】第513题:找树左下角的值

LeetCode 链接:https://leetcode-cn.com/problems/find-bottom-left-tree-value/题目:给定一个二叉树,在树的最后一行找到最左边的值。分析:层次遍历二叉树,并在遍历时记录下一层的个数和当前的层的个数,当当前层的数量为 0 时,如果下一层的节点数量大于0,则更新 val 的值为队列中队首的值。遍历结束时,返回的 val 即为...

2019-07-11 17:43:55 459

原创 【手撕代码】大数问题:大数相加和大数相乘问题 + Karatsuba 算法

目 录:1、大数相加2、大数相乘3、Karatsuba 算法大数问题,简而言之就是不可以使用 int 类型直接进行加减乘除的操作,需要将其转换为字符串后再进行操作。1、大数相加分析:将两个数字字符串转换成相同长度,短的数字高位补 0,主要的操作在于两个字符串对应位置相加后得到的结果是否需要进位的问题,最后还需要剔除结果数组中高位为 0 的数。public class...

2019-07-11 16:30:20 927 1

转载 【LeetCode】第1题:两数之和 + 第15题三数之和

目 录:1、两数之和2、三数之和LeetCode 链接:第1题:https://leetcode-cn.com/problems/two-sum/第15题:https://leetcode-cn.com/problems/3sum/1、两数之和暴力解:两次 for 循环,时间复杂度为:O(N)。两遍哈希表:为了对运行时间复杂度进行优化,我们需要一种更有效...

2019-07-10 00:17:32 633

原创 【LeetCode】第124题:二叉树的最大路径和

LeetCode 链接:https://leetcode-cn.com/problems/binary-tree-maximum-path-sum/本题可以对比左神算法中的:二叉树中的最远距离,只不过最远距离中没有考虑权重的问题,本题需要考虑每个节点的权重问题,还是有所区别的。题目:给定一个非空二叉树,返回其最大路径和。本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该...

2019-07-09 21:25:05 1252

原创 【LeetCode】第617题:合并二叉树

LeetCode 链接:https://leetcode-cn.com/problems/merge-two-binary-trees/comments/题目:给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为NULL 的节点将直接作为新二叉树的...

2019-07-09 19:33:36 311

原创 【leetCode】第581题:最短无序连续子数组

LeetCode 链接:https://leetcode-cn.com/problems/shortest-unsorted-continuous-subarray/题目:给定一个整数数组,你需要寻找一个连续的子数组,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。你找到的子数组应是最短的,请输出它的长度。示例 1:输入: [2, 6, 4, 8, 10, 9, 15]...

2019-07-09 16:48:54 454

原创 【LeetCode】第560题:和为K的子数组

LeetCode 链接:https://leetcode-cn.com/problems/subarray-sum-equals-k/comments/题目:给定一个整数数组和一个整数k,你需要找到该数组中和为k的连续的子数组的个数。示例 1 :输入:nums = [1,1,1], k = 2输出: 2 , [1,1] 与 [1,1] 为两种不同的情况。说明 :数组的长...

2019-07-09 15:31:16 2190

原创 【LeetCode】第698题:将一个整数数组划分为K个相等的子集问题(字节跳动面试题)

最近看面经,有人在字节跳动的面试中,手写这道题,但是发现是 LeetCode 上的原题,所以记录下来。题目:给定一个整数数组nums和一个正整数k,找出是否有可能把这个数组分成k个非空子集,其总和都相等。示例 1:输入: nums = [4, 3, 2, 3, 5, 2, 1], k = 4输出: True说明: 有可能将其分成 4 个子集(5),(1,4),(2,3...

2019-07-08 10:56:32 8020 4

原创 【搞定算法】归并排序及其解决逆序对数、小和问题

归并排序也是分治法一个很好的应用,先递归到最底层,然后从下往上每次两个序列进行归并合起来,是一个由上往下分开,再由下往上合并的过程。而对于每一次合并操作,对于每一次 merge 的操作过程如下:1、准备一个额外的数组(help),使其大小为两个已经排序序列之和,该空间用来存放合并后的序列;2、设定两个指针,最初位置分别为两个已经排序序列的起始位置;3、比较两个指针所指向的元素,选择...

2019-07-07 18:34:30 2850 2

原创 【搞定算法】BFPRT 算法、快排解决第 k 大数问题

博主秋招提前批已拿百度、字节跳动、拼多多、顺丰等公司的offer,可加微信:pcwl_Java 一起交流秋招面试经验。目 录:方法1:暴力解法方法2:快排实现【笔试版+面试版】方法3:BFPRT 算法实现【面试优化版】问题:求一个数组中的第 k 小 / 大的数。说明:这道题求解不难,主要的目的是为了引出 快排算法的应用(partiotion)和 BFPRT 算法...

2019-07-07 15:56:46 1760 1

原创 【搞定算法】最长回文子串问题

该题目是 LeetCode 上的第五题:最长回文子串。题目:给定一个字符串s,找到s中最长的回文子串。你可以假设s的最大长度为 1000。本文给出该题目的三种解法:暴力解法、动态规划、Manacher 算法。暴力解法无法通过运行时间、Manacher 算法有点复杂,所以在真正笔试的时候,我会选择动态规划。但是要是在面试中遇到这道题,可以采用 Manacher 算法进行优化。...

2019-07-06 20:26:08 237

原创 【搞定算法】Manacher 马拉车算法

求一个字符串中的最长回文子串,这是一道经典的面试题目,解法有很多,详细可见:最长回文子串问题。其实个人感觉 Manacher 算法代码实现还是有一定难度的,真正在做题目的时候采用的可能性不是很大,但是由于 Manacher 算法求解回文子串方面的时间复杂度为 O(N),所以了解其思想还是很有必要的,coding 能力比较强的话,采用 Manacher 算法解决最长回文子串问题更是最合适不过了。...

2019-07-06 18:19:56 416

原创 【搞定算法】KMP 算法

目 录:1、问题描述2、next 数组3、代码实现4、KMP 的应用4.1、子树问题4.2、加最短字符问题前面讲过字符串匹配的其他几种算法:字符串匹配算法之 BF、RK、BM。本文用来讲解 KMP 算法及其应用,KMP 算法时间复杂度为:O(N + M),空间复杂度为:O(M)。1、问题描述给定两个字符串 O 和 f,长度分别为 n 和 m,判断 f 是否...

2019-07-06 15:57:45 510

原创 【手撕代码】手写一个简单的HashMap

最近看面经发现很多人都遇到手写 HashMap 的场景。我们都知道 JDK1.7 和 JDK1.8 中的 HashMap 实现差别还是比较大的,主要是JDK1.8中的 HashMap 引入了红黑树。那么面试过程中,应该不会让你手写红黑树的(我觉得),所以只需要掌握一个简单的 put、get、resize 方法即可。本文先写了 put 和 get 方法,其他方法后续再完善。1、先新建 16...

2019-07-05 00:54:20 3767 4

转载 【搞定算法】蓄水池算法

1、问题描述分析采样问题经常会被遇到,比如:1、从 100000 份调查报告中抽取 1000 份进行统计;2、从一本很厚的电话簿中抽取 1000 人进行姓氏统计;3、从 Google 搜索 "Ken Thompson",从中抽取 100 个结果查看哪些是今年的。既然说到采样问题,最重要的就是做到公平,也就是保证每个元素被采样到的概率是相同的。所以可以想到要想实现这样的算法,就需...

2019-07-04 15:55:05 2930 1

转载 【搞定算法】二叉树信息收集问题(高度套路)

目 录:1、舞会的最大活跃度2、求一棵二叉树的最大搜索二叉子树的结点个数3、求一棵二叉树的最远距离最近看了左神的高阶算法视频,觉得很多算法题目解题思路确实是非常套路化的。本文整理了左神算法讲解中关于二叉树信息收集问题的高度套路。都是首先想好假设,想和子树要什么样的信息,然后自己拿到这个信息需要返回自己的什么信息。高度套路化:列出可能性 -> 从子过程收集的信息中整合出...

2019-07-04 11:48:37 564

原创 【拼多多面试题】实现1-50有序数组中的全部元素随机输出

在 pdd 的面试中遇到让手写一个函数实现:1-50有序数组中的元素随机输出。感觉很简单的题目,由于面试官说不可以直接使用 Random ,当时觉得应该就是 Random 的源码实现,但是由于没有看过 Random 的源码,所以一直没想到思路。现在将该题的解题思路记录下来。 思路: 1、从数组的最后一个位置(假设下标是n)开始向前扫描,然后随机生成一个 0 到 n 之间的随机数,假设该...

2019-05-28 11:50:40 1495

原创 【手撕代码】单例模式

面试过程中,经常被遇到手写单例模式的代码,本文就常用的几种单例模式的写法进行总结。单例模式,就是一个应用程序中,某个类的实例对象只有一个,你没有办法去 new,因为构造器是被 private 修饰的,一般通过 getInstance() 的方法来获取它们的实例。一、懒汉式用到时再去创建public class Singleton { private static Sin...

2019-04-26 20:13:10 1113

原创 【手撕代码】背包问题:数组中任意数累加得到目标值(递归+动态规划)

问题:给你一个数组 arr,和一个整数 aim。如果可以任意选择 arr 中的数字,能不能累加得到 aim,返回 true 或者 false。一、递归版本【分析】:每个位置 i 有 要和不要 两种选择;叶节点会看自己这里的结果是不是 aim,从而向父结点返回 true 或 false,父结点比较子节点的结果,有一个为 true 就一直返回 true,否则返回 false。分析...

2019-04-23 17:17:47 2399 6

原创 【手撕代码】矩阵最小路径问题(递归+动态规划)

题目:给你一个二维数组,二维数组中的每个数都是正数,要求从左上角走到右下角,每一步只能向右或者向下。沿途经过的数字要累加起来。返回最小的路径和。一、递归版本如果矩阵为 n x n,那么时间复杂度为:O()。递归版本虽然简单,但是时间复杂度过高,显然是不行的。通过分析发现,在递归过程中,会有很多重复的计算,如下图所示:在计算(1,0)位置的右元素和计算(0,1)位置的下元素时,...

2019-04-23 17:03:39 1329 1

原创 【手撕代码】二叉树的前序、中序、后序、层级遍历

目 录:一、递归实现1、前序遍历2、中序遍历3、后序遍历二、非递归实现1、层级遍历2、前序遍历3、后序遍历4、中序遍历在面试中常常会问到二叉树的遍历形式:前序、中序、后序以及层级遍历。一般情况下,不会让你手写递归版本,因为确实太简单了,所以,我们需要熟练的掌握非递归版版本。一、递归实现1、前序遍历public class PreOrderWi...

2019-04-21 18:49:25 1450

原创 【手撕代码】二分查找:递归和非递归实现

本文主要讲述面试现场常遇见的手撕代码题:二分查找。虽然代码很好理解也很简单,但是感觉只有多练,多理解才能真的掌握。千万不要眼高手低,稳扎稳打才是王道。一、非递归版本public class BinarySearch { /** * 非递归实现 * @param array : 有序数组 * @param key :需要查找的数 * @re...

2019-04-21 14:52:21 1144

转载 【手撕代码】生产者消费者问题

本文转自:https://www.jianshu.com/p/3f0cd7af370d在现场面试的过程中,经常遇到手写生产者和消费者的问题。这里做个总结:这绝对是属于重点了,不管是考察对于该重要模型的理解还是考察代码能力,这都是一道很好的考题,所以很有必要的,我们先来回顾一下什么是生产者-消费者问题。一、问题简单回顾生产者消费者问题(英语:Producer-Consumer pr...

2019-04-21 14:00:15 1241

原创 【手撕代码】多个线程交替打印

目 录:方法一:锁实现【推荐】方法二:信号量 semaphore 实现【推荐】方法三:wait / notify 实现方法四:使用 Lock / Condition 实现面试的过程中,多个线程交替打印是经常被要求手写的。借用本文列出几种常用的解题方法。方法一:锁实现【推荐】times:保证每个线程的打印次数;state:保证每个线程之间的交替打印;lock:...

2019-04-21 11:35:53 1150 2

转载 Java 中 Scanner 类常用方法总结

本文转自:https://blog.csdn.net/Megustas_JJC/article/details/68960433一、Scanner 简介Java 5 添加了 java.util.Scanner 类,这是一个用于扫描输入文本的新的实用程序。它是以前的 StringTokenize r和 Matcher 类之间的某种结合。由于任何数据都必须通过同一模式的捕获组检索或通过使用一个...

2019-04-17 20:35:06 682

转载 【搞定Spring源码】第 1 篇:IOC 容器

本文转发自:https://javadoop.com/post/spring-ioc目录一、引言二、BeanFactory 简介三、启动过程分析3.1、创建 Bean 容器前的准备工作3.2、创建 Bean 容器,加载并注册 Bean3.3、BeanDefinition 接口定义3.4、customizeBeanFactory3.5、加载 Bean: loadB...

2019-04-16 19:59:50 621

原创 【leetcode】第394题:字符串解码(华为笔试题)

题目:给定一个经过编码的字符串,返回它解码后的字符串。编码规则为:k[encoded_string],表示其中方括号内部的encoded_string正好重复k次。注意k保证为正整数。你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数k,例如不会出现像3a或2[4...

2019-04-13 18:48:43 3903

原创 字符串的排列与组合【Java 递归实现】

我们在笔试中经常会遇到需要对字符串进行排列或者组合的题目。本篇文章对字符串的排列和组合进行递归版本的实现。如果你有更简单易懂的方法,一定要在评论区留下来~1、字符串的组合【子序列】题目:输入一个字符串,输出该字符串中字符的所有组合。例子:输入:abc,它的组合有:a、b、c、ab、ac、bc、abc分析:我们可以将字符串中的每个字符看成二叉树的一个节点,根节点为空,每个节点都...

2019-04-13 15:34:08 1681 2

原创 【leetcode】第3题:无重复字符的最长子串

原文链接:https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/说明:部分文字解析来自于原文。目 录:一、暴力解法【时间复杂度O(n^3)】二、滑动窗口【时间复杂度为O(n)】三、优化的滑动窗口给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。示例...

2019-04-10 22:40:11 633 1

Java NIO核心概念总结篇

这是学习Java NIO过程中总结的核心概念,里面包含了基本的知识点,详细知识点也可以查看我的博客:pcwl_java里的Java NIO篇

2018-10-11

文件校验工具

用于文件校验,比对各种加密方式后的结果,非常好用!

2018-10-07

Navicate免安装版

Navicate的免安装版,解压后直接运行.exe文件就可以使用

2018-10-07

JVM知识点汇总

平时收集的与JVM相关的文章,现将整理在一起分享给大家,内容通俗易懂

2018-10-07

计算机网络协议概述

本文档中收录了20多篇平时收录的和计算机网络技术相关的文章,现整理分享给大家!

2018-10-07

Java中equals,hashcode和==的区别

本文中详细的阐述了Java中经常遇到的equals、hashcode以及“==”号三者之间的区别

2018-10-07

Java多线程知识点总结

该文档总结了Java多线程相关的知识点,分享给大家,简单易懂!

2018-08-19

Altova XMLSpy2013简体中文版

Altova XMLSpy主要用于XML的编辑和校验用,最近做XML相关的项目,收藏了一个破解中文版

2018-07-07

空空如也

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

TA关注的人

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