Java
文章平均质量分 51
东大梅西
这个作者很懒,什么都没留下…
展开
-
LintCode 578 · 最近公共祖先 III
题目描述方法一:分治法(递归)分治法的思想就是在每一层分为左右子树进行寻找,左右子树返回的leftNode和rightNode如果都不为空,则说明A和B在左右子树各有一个,则返回当前节点;如果leftNode和rightNode有一个为空一个不为空,则有两种情况,第一种情况就是A和B都是一边子树,另一边子树两个节点都没找到,第二种情况就是A或者B中的某一个在某一子树,而另外一个子树中两个节点都没找到,为了区分这两种情况,我们使用foundA和foundB来记录两个节点是否被找到的状态。Java代原创 2021-07-08 14:17:55 · 201 阅读 · 0 评论 -
【Lintcode】390. Find Peak Element II
题目描述法1:对行二分。我们选取A AA的中间一行,并寻找该行的最大值,如果其为峰值,则直接返回其坐标;否则的话要么其上方比其更大,要么其下方比其更大。如果其上方比其更大,那么A AA的上半部分就一定有一个峰值(证明很简单,顺着这个值,每次走向与其相邻的最大值,由于上半部分数字只有有限个,这样走有限步一定会停下来,并且一定不会停在边界上,也不会走到下半部分,因为我们是从中间行的最大值出发的。停下来的地方就是峰值)。这样我们就将问题规模缩小成为了一半。如此缩小下去即能找到峰值坐标。代码如下:imp转载 2021-07-06 11:05:23 · 176 阅读 · 0 评论 -
Java 和 Hadoop 序列化机制浅讲
1.序列化 序列化 (Serialization)将对象的状态信息转换为可以存储或传输的形式的过程(字节流)。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。 通常来说有三个用途: 持久化:对象可以被存储到磁盘上通信:对象可以通过网络进行传输拷贝、克隆:可以通过将某一对象序列化到内存的缓冲区,然后通过反序列化生成该对象的一个深拷贝(破解单例模式的一种方法) 2.Java序列化机...转载 2021-07-02 14:32:01 · 279 阅读 · 0 评论 -
二分法例题 LintCode62/63/159/160 搜索旋转排序数组及变体
题目描述解题思路本题不同于普通的升序数组,虽然数组内部是按序排列的,但是数组以某个元素作为支点进行了旋转,那么就不能直接使用二分查找,需要分情况进行讨论。这个时候最好的办法就是在纸上画画图,将可能发生的情况都罗列出来,类似于做数学题的分类讨论,做到不重不漏。situation1A[mid] > A[start](1) A[start] < target < A[mid]end = mid;(2) target > A[mid]或者target < A原创 2021-06-30 11:39:29 · 121 阅读 · 1 评论 -
记一个二分查找的算法模板(Java版)
先上代码 public int binarySearch(int[] nums, int target) { if (nums == null || nums.length == 0) return -1; int start = 0, end = nums.length - 1, mid; while (start + 1 < end) { mid = start + (end - start)原创 2021-06-28 15:06:40 · 145 阅读 · 0 评论 -
LintCode13 · 字符串查找(KMP算法实现)
题目描述解法一:暴力求解暴力求解就不多说什么废话了,直接上代码了 public int strStr(String source, String target) { char[] s = source.toCharArray(); char[] t = target.toCharArray(); int m = s.length; int n = t.length; int i = 0, j = 0;原创 2021-06-27 21:10:44 · 147 阅读 · 2 评论 -
LintCode 436 · Maximal Square(最大正方形)
题目描述直觉动态规划组成部分一:确定状态子问题动态规划组成部分二:转移方程动态规划组成部分三:初始条件和边界情况动态规划组成部分四:计算顺序Java代码实现 public int maxSquare(int[][] matrix) { int m = matrix.length; int n = matrix[0].length; int[][] f = new int[m][n]; int res原创 2021-06-26 10:39:54 · 61 阅读 · 0 评论 -
LintCode 622 · Frog Jump(青蛙跳)
题目描述动态规划组成部分一:确定状态子问题动态规划组成部分二:转移方程动态规划组成部分三:初始条件和边界情况动态规划四:计算顺序Java代码实现 public boolean canCross(int[] stones) { int n = stones.length; boolean[][] f = new boolean[n][n]; f[0][0] = true; List<Integer>原创 2021-06-25 21:23:43 · 132 阅读 · 2 评论 -
字典树例题 LintCode623 · K步编辑
题目描述题目分析字母树动态规划组成部分一:确定状态动态规划组成部分三:初始条件和边界情况动态规划组成部分四:计算顺序Java代码实现 char[] tar = null; int K = 0; int n = 0; List<String> res = null; public List<String> kDistance(String[] words, String target, int k) {原创 2021-06-24 14:06:51 · 142 阅读 · 0 评论 -
背包问题变种 LintCode89 k Sum(K数之和)
题目描述题目分析动态规划组成部分一:确定状态动态规划组成部分二:转移方程动态规划组成部分三:初始条件和边界情况动态规划组成部分四:计算顺序Java代码实现 public int kSum(int[] A, int K, int target) { int len = A.length; int[][][] f = new int[len + 1][K + 1][target + 1]; f[0][0][0] = 1;原创 2021-06-22 00:40:32 · 149 阅读 · 0 评论 -
LintCode91 Minimum Adjustment Cost(最小调整代价)
题目描述动态规划组成部分一:确定状态设修改后的数组为B。最后一步:将A改成B,A[n-1]改成X,这一步代价是|A[n-1]-X|。-需要确保|X-B[n-2]|<=target前面n-1个元素A[0…n-2]改成B[0…n-2],需要知道最小代价,并确保B[0…n-2]中任意两个相邻的元素的差不超过target但是有一个问题,改A[n-1]时不知道B[n-2]是多少只有知道了B[n-2],才能确定A[n-1]能改成(B[n-2]-target,B[n-2]+target)原创 2021-06-21 23:46:06 · 227 阅读 · 1 评论 -
类多重背包问题例题 Lintcode668 Ones and Zeroes(一和零)
题目描述动态规划组成部分一:确定状态动态规划组成部分二:转移方程动态规划组成部分三:初始条件和边界情况动态规划组成部分四:计算顺序Java代码实现 public int findMaxForm(String[] strs, int m, int n) { int len = strs.length; int[] zero = new int[len]; int[] one = new int[len]; char[原创 2021-06-21 18:48:07 · 71 阅读 · 0 评论 -
双序列型动态规划例题6 Lintcode192 (通配符匹配)Wildcard Matching
题目描述动态规划组成部分一:确定状态动态规划组成部分二:转移方程动态规划组成部分三:初始条件和边界情况动态规划组成部分四:计算顺序Java代码实现 public boolean isMatch(String s, String p) { int m = s.length(); int n = p.length(); char[] ch1 = s.toCharArray(); char[] ch2 = p.toC原创 2021-06-21 11:17:54 · 83 阅读 · 0 评论 -
双序列型动态规划例题5 Lintcode154 (正则表达式匹配)Regular Expression Matching
题目描述动态规划组成部分一:确定状态子问题动态规划二:转移方程动态规划组成部分三:初始条件和边界情况动态规划组成部分四:计算顺序Java代码实现 public boolean isMatch(String s, String p) { int m = s.length(); int n = p.length(); char[] ch1 = s.toCharArray(); char[] ch2 = p.toCh原创 2021-06-20 16:37:56 · 79 阅读 · 0 评论 -
双序列型动态规划例题4 Lintcode118 (不同的子序列)Distinct Subsequence
题目描述题目分析动态规划组成部分一:确定状态子问题动态规划组成部分二:转移方程动态规划组成部分三:初始条件和边界情况注意:这里的f[i][0]=1不是凭空设置的,而是根据实际情况和转移方程计算出来的,这是一个初始条件。动态规划组成部分四:计算顺序Java代码实现 public int numDistinct(String S, String T) { int m = S.length(); int n = T.length();原创 2021-06-18 15:56:39 · 66 阅读 · 0 评论 -
双序列型动态规划例题3 Lintcode119 (编辑距离)Edit Distance
题目描述动态规划组成部分一:确定状态子问题动态规划组成部分二:转移方程动态规划组成部分三:初始条件和边界情况动态规划组成部分四:计算顺序Java代码实现: public int minDistance(String word1, String word2) { int m = word1.length(); int n = word2.length(); char[] ch1 = word1.toCharArray(原创 2021-06-18 14:21:18 · 88 阅读 · 0 评论 -
双序列型动态规划例题2 Lintcode29 Interleaving String
题目描述动态规划组成部分一:确定状态子问题动态规划组成部分二:转移方程动态规划组成部分三:初始条件和边界情况动态规划组成部分四:计算顺序Java代码实现 public boolean isInterleave(String s1, String s2, String s3) { int m = s1.length(); int n = s2.length(); if (m + n != s3.length())原创 2021-06-18 12:50:07 · 68 阅读 · 0 评论 -
双序列型动态规划例题1 Lintcode77Longest Common Subsequence
题目描述动态规划组成部分一:确定状态子问题动态规划组成部分三:初始条件和边界情况动态规划组成部分四:计算顺序Java代码实现: public int longestCommonSubsequence(String A, String B) { int m = A.length(); int n = B.length(); char[] a = A.toCharArray(); char[] b = B.t原创 2021-06-17 21:21:19 · 108 阅读 · 0 评论 -
lintcode200 · 最长回文子串(马拉车算法)
题目描述Manacher’s Algorithm 马拉车算法马拉车算法 Manacher‘s Algorithm 是用来查找一个字符串的最长回文子串的线性方法,由一个叫Manacher的人在1975年发明的,这个方法的最大贡献是在于将时间复杂度提升到了线性。首先我们解决下奇数和偶数的问题,在每个字符间插入"#",并且为了使得扩展的过程中,到边界后自动结束,在两端分别插入 “^” 和 “$”,两个不可能在字符串中出现的字符,这样中心扩展的时候,判断两端字符是否相等的时候,如果到了边界就一定会不相等,从转载 2021-06-17 19:32:20 · 129 阅读 · 0 评论 -
Hard! lintcode430 · 攀爬字符串
题目描述给定一个字符串 s, 将其递归地分割成两个非空子字符串, 然后可以得到一棵二叉树.下面是 s = “great” 可能得到的一棵二叉树:在攀爬字符串的过程中, 我们可以选择其中任意一个非叶节点, 交换该节点的两个子节点.例如,我们选择了 “gr” 节点, 并将该节点的两个子节点进行交换, 并且将祖先节点对应的子串部分也交换, 最终得到了 “rgeat”. 我们认为 “rgeat” 是 “great” 的一个攀爬字符串.类似地, 如果我们继续将其节点 “eat” 和 “at” 的子节点交原创 2021-06-09 13:48:18 · 98 阅读 · 0 评论 -
jps不是内部或外部命令
JPS不是内部或外部命令 需要把Path环境变量中的JDK和JRE的bin分开 原来: 更改后: 终端可以使用jps命令:转载 2021-04-22 00:38:47 · 1443 阅读 · 0 评论 -
背包问题总结(1到10)
背包问题一直都是动态规划中的经典题目,下面通过这篇博文,系统的梳理一下解决背包问题的思路和要点;主要是好记性不如烂笔头嘛,怕自己忘得快,还能翻出来这篇文章来复习一下(注:本文的所有解决思路均为动态规划,不涉及贪心法等算法)三种背包的概念区分首先,背包问题的题型逃不出三种,那就是01背包问题、完全背包问题和多重背包问题,我们先来了解一下这三种题型的区别在哪里01背包(ZeroOnePack)有N件物品和一个容量为V的背包。每种物品均只有一件。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装原创 2021-04-11 20:30:13 · 596 阅读 · 2 评论 -
leetcode_动态规划_入门总结
四个组成部分确定状态研究最优策略的最后一步化为子问题转移方程根据子问题定义直接得到初始条件和边界情况细心,考虑周全计算顺序利用之前的计算结果通常一维从小到大,二维从上到下、从左到右...原创 2021-03-22 22:47:54 · 144 阅读 · 0 评论 -
IntelliJ IDEA 代码补全
代码补全的方式有:Basic completion 基本补全 :Ctrl+SpaceSmart completion 智能补全:Ctrl+Shift+SpaceStatement completion 语句补全:Ctrl+Shift+EnterHippie completion : Alt+/Postfix code completion 后缀补全machine learning-assisted completion :新版本增加了机器学习辅助补全。它的作用是,利用机器学习模型在建议转载 2020-09-15 20:17:57 · 9292 阅读 · 0 评论 -
IntelliJ IDEA 之 呈现模式
写在前面IntelliJ Idea 为用户提供了多种呈现模式,在某些情况下,默认呈现方式有可能无法满足你的需求。例如上线之前会有一个代码评审的环节,Idea 默认展现出来的代码看上去会不舒服,因为 Idea 还会呈现除代码之外的内容:菜单栏、工具栏、导航栏等。题外话我是沂蒙山区的孩子,像音频里说的一样,现在乡下已经无法听到 “卖小鸡吆,卖小鸡吆” 的吆喝声了,连养鸡的农村人也越来越少了。主要内容+ 演示环境+ Idea 用户界面介绍+ Idea 全屏模式+ Idea 演示模式+ Idea 集中模.转载 2020-09-15 09:48:18 · 848 阅读 · 0 评论 -
Java类的加载机制(类加载和初始化顺序)
JAVA类的加载机制Java类加载分为5个过程,分别为:加载,连接(验证,准备,解析),初始化,使用,卸载。加载加载主要是将.class文件(也可以是zip包)通过二进制字节流读入到JVM中。 在加载阶段,JVM需要完成3件事:1)通过classloader在classpath中获取XXX.class文件,将其以二进制流的形式读入内存。2)将字节流所代表的静态存储结构转化为方法区的运...转载 2020-05-02 22:06:54 · 109 阅读 · 0 评论