自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(100)
  • 收藏
  • 关注

原创 Go 接口值

看Go语言程序设计的接口值时产生的一个问题。结构体赋值给接口变量,是否会复制原本的结构体,以及接口之间赋值,是否会拷贝其包含的结构体变量go 版本1.17package mainimport ( "fmt" "unsafe")type inter interface {}type S struct { v string}func main() { var f, f2, c inter var s = &S{v: "sd"} fmt.Printf("%p\n",

2021-11-16 18:01:42 336

原创 IDEA java Doc提示 Wrong tag

设置,editor的inspections,java doc添加自定义tag

2021-07-22 19:47:51 369

原创 三个线程交替打印

面试脑袋一片空白,只记得用condition。。靠了。import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;/** * @author 香榭的落叶 * @date 2020/3/22 * @describe */public class Game { public stat

2021-03-27 21:33:08 252

原创 修改module名称 找不到启动类

如果module 中有 iml文件,删除。

2020-12-05 21:03:02 385

原创 Maven本地仓库jar包存在,项目中引用报错

删除本地仓库的jar包文件夹,maven reload project

2020-11-17 15:01:16 689

原创 32进制数相加

public class Main { static Map<Character, Integer> charInt = new HashMap<>(); static Map<Integer, Character> intChar = new HashMap<>(); static { for (char i = '0'; i <= '9'; i++) { charInt.put(i, i - '0');

2020-10-29 17:01:29 447

原创 位图数组

介绍要判断一千万个整数中是否存在某个数,如何查找?简单的想法是创建一个一千万大小的数组,然后遍历查找,这样即耗费空间又耗费时间。所以我们可以创建位图数组。实际上这个数组就是个普通数组byte, int, long类型都可以,只不过我们每次操作的是数组中一个元素的其中一位。如果要加入一个数字11,那么我们就设置这个位图数组的第11位为1,就代表这个数存在。比如用byte类型实现一个位图数组。由于byte类型是八位,所以我们就可以数组大小为实际需求的容量/8。如果是int类型就除以32。所以bytes[

2020-10-27 14:38:12 960 3

原创 计算数组的最小和

题目数组小和的定义如下:例如,数组s = [1, 3, 5, 2, 4, 6],在s[0]的左边小于或等于s[0]的数的和为0;在s[1]的左边小于或等于s[1]的数的和为1;在s[2]的左边小于或等于s[2]的数的和为1+3=4;在s[3]的左边小于或等于s[3]的数的和为1;在s[4]的左边小于或等于s[4]的数的和为1+3+2=6;在s[5]的左边小于或等于s[5]的数的和为1+3+5+2+4=15。所以s的小和为0+1+4+1+6+15=27给定一个数组s,实现函数返回s的小和

2020-10-26 17:40:37 852 1

原创 Java中Map 接口的一些新增方法

putIfAbsent方法这个很好理解,如果当前key对应value为空,就进行put。否则不做事。 default V putIfAbsent(K key, V value) { V v = get(key); if (v == null) { v = put(key, value); } return v; }compute方法直接看代码 default V compute(K key,

2020-10-20 20:12:21 335 1

原创 并查集简单实现

class UnionFind { int[] data = new int[26]; public UnionFind() { for (int i = 0; i < data.length; i++) { data[i] = i; } } private int findRoot(int cur) { //路劲压缩,避免查找树过长 return cur == data[cur] ? cur : (data[cur] = findRoo

2020-10-13 12:53:03 98

原创 KMP算法

class Solution { public int strStr(String s1, String s2) { if (s1.length() < s2.length()) return -1; if(s2.length() == 0)return 0; int i = 0, j = 0; int[] next = getNextArr(s2); while (i < s1.length() && j < s2.length

2020-09-28 17:42:27 97

原创 Manacher算法简单实现

/** * @author: 1298509345 * date: 2020/8/23 * Time: 20:34 * Describe: */public class Main2 { static char[] manacherStr(String str) { char[] chars = str.toCharArray(); char[] ret = new char[chars.length * 2 + 1]; int idx = 0; for (i

2020-09-28 17:40:42 85

原创 字母交换

题目字符串S由小写字母构成,长度为n。定义一种操作,每次都可以挑选字符串中任意的两个相邻字母进行交换。询问在至多交换m次之后,字符串中最多有多少个连续的位置上的字母相同?链接思路记录每个字母出现的下标。对每一个字母出现的所有位置,进行滑窗计算移动代价。窗口从一个元素开始扩大,计算代价超过要求,缩小窗口,否则扩大窗口。由经验可得,要把滑窗内所有位置移动到连续位置,两边元素靠中间元素移动的代价较小。比如字母a的所有下标情况为[11,13,15,17,19|21,23,25,30,31],选取中

2020-08-19 13:59:57 1554

原创 LeetCode剑指 Offer 07. 重建二叉树

题目输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。链接/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution {

2020-08-07 21:42:27 112

原创 LeetCode剑指 Offer 11. 旋转数组的最小数字

题目把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。链接思路二分,只不过注意旋转点需要判断。如果num[mid]>num[right],说明旋转点一定在mid右边[mid+1,right]闭区间中因为如果旋转点在mid左边,说明mid到right一定是升序,不可能出现num[mid]>num[right]否则旋

2020-07-22 11:02:07 92

原创 栈实现二叉树迭代遍历

二叉树前序,中序,后序通用public List<Integer> postorderTraversal(TreeNode root) { List<Integer> res = new ArrayList<>(); Deque<TreeNode> stack = new LinkedList<>(); if(root != null){ stack.push(root);

2020-07-21 18:07:53 217

原创 LeetCode 167. 两数之和 II - 输入有序数组,15. 三数之和

题目给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数。函数应该返回这两个下标值 index1 和 index2,其中 index1 必须小于 index2。链接说明:返回的下标值(index1 和 index2)不是从零开始的。你可以假设每个输入只对应唯一的答案,而且你不可以重复使用相同的元素。思路HashMap,O(n)扫描,查找target - numbers[iclass Solution { public int[] twoSum(int[] numb

2020-07-20 12:17:33 125

原创 LeetCode785. 判断二分图

题目给定一个无向图graph,当这个图为二分图时返回true。如果我们能将一个图的节点集合分割成两个独立的子集A和B,并使图中的每一条边的两个节点一个来自A集合,一个来自B集合,我们就将这个图称为二分图。graph将会以邻接表方式给出,graph[i]表示图中与节点i相连的所有节点。每个节点都是一个在0到graph.length-1之间的整数。这图中没有自环和平行边: graph[i] 中不存在i,并且graph[i]中没有重复的值。链接思路一开始没读懂题。。他这个邻接表有点意思,一共graph.

2020-07-16 11:39:12 125

原创 LeetCode96. 不同的二叉搜索树

题目给定一个整数 n,求以 1 … n 为节点组成的二叉搜索树有多少种?链接思路一个二叉搜索树,根左边与右边所组成的个数的积即为所有个数。设G(n)为n个节点所能组成的二叉搜索树的个数。设F(i) i∈[1,n]是为以i为根节点,所能组成的二叉搜索树的个数。有G(n) = F(1) + F(2) + ... + F(n)对于每个节点i,它的左子树[1,i-1],有i-1个节点,右子树[i+1,n],有n-i个节点。所以F(i) = G(i-1) * G(n-i)。所以G(n) = G(0

2020-07-15 10:55:22 122

原创 LeetCode174. 地下城游戏

题目一些恶魔抓住了公主(P)并将她关在了地下城的右下角。地下城是由 M x N 个房间组成的二维网格。我们英勇的骑士(K)最初被安置在左上角的房间里,他必须穿过地下城并通过对抗恶魔来拯救公主。骑士的初始健康点数为一个正整数。如果他的健康点数在某一时刻降至 0 或以下,他会立即死亡。有些房间由恶魔守卫,因此骑士在进入这些房间时会失去健康点数(若房间里的值为负整数,则表示骑士将损失健康点数);其他房间要么是空的(房间里的值为 0),要么包含增加骑士健康点数的魔法球(若房间里的值为正整数,则表示骑士将增加健

2020-07-12 10:50:54 112

原创 字典树字符串匹配

题目哦,不!你不小心把一个长篇文章中的空格、标点都删掉了,并且大写也弄成了小写。像句子"I reset the computer. It still didn’t boot!“已经变成了"iresetthecomputeritstilldidntboot”。在处理标点符号和大小写之前,你得先把它断成词语。当然了,你有一本厚厚的词典dictionary,不过,有些词没在词典里。假设文章用sentence表示,设计一个算法,把文章断开,要求未识别的字符最少,返回未识别的字符数。链接class Solutio

2020-07-09 11:12:29 425

原创 全排列回溯

输入一个字符串,打印出该字符串中字符的所有排列。class Solution { char[] c; boolean[] visit; public String[] permutation(String str) { List<String> res = new ArrayList<>(); c = str.toCharArray(); if(c.length == 0){

2020-07-06 21:46:41 136

原创 LeetCode63. 不同路径 II

题目一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?链接思路一开始没好好读题,想着上下左右dfs。。机器人只能向下或者向右移动一步。到达位置(i,j)时,机器人只有可能是从(i - 1, j)或者(i, j - 1)着两个位置移动到达。所以能到达位置(i, j)的路径数为到达(i - 1,

2020-07-06 12:13:23 178 1

原创 LeetCode108. 将有序数组转换为二叉搜索树

题目将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。链接思路数组有序,二叉搜索树,还要保证平衡。那就二分,每次选mid为根节点,左右子节点递归在[left, mid - 1], [mid + 1, right]这两个区间内建立,尽可能保证每个节点的左右子节点都存在,直到叶子节点,即区间长度为1结束。class Solution { public TreeNode sortedArray

2020-07-03 11:31:38 105

原创 Spring框架笔记

Spring概念spring是开源的免费的框架(容器)spring是轻量级的,非侵入式的spring核心主要两部分 :AOP : 面向切面编 ,扩展功能不是修改源代码实现 .IOC : 控 制 反 转 ,比 如 有 一 个 类 , 在 类 里 面 有 方 法 ( 不 是 静 态 的 方 法 ) , 调 用 类 里 面 的 方 法 , 创 建 类 的 对 象 , 使 用 对 象 调 用 方 法 , 创 律 类 对 象 的 过 程 , 需 要 new 出 来 对 象 . 把 对

2020-07-02 18:38:48 144

原创 LeetCode378. 有序矩阵中第K小的元素

题目给定一个 n x n 矩阵,其中每行和每列元素均按升序排序,找到矩阵中第 k 小的元素。请注意,它是排序后的第 k 小元素,而不是第 k 个不同的元素。链接思路二分。。真想不到。。由于矩阵的性质,每个元素的左上角的所有元素都小于等于它,所以可以从矩阵左下角开始遍历,可以在O(n)时间内找到所有小于等于某个元素的个数。二分,left = matrix[0][0], right = matrix[n - 1][n - 1],第k小的元素肯定在这个区间内,所以对这个区间内的值进行二分。为什么最

2020-07-02 12:16:12 108

原创 堆排序

public class HeapSort { public static void main(String[] args) { int[] arr = {7, 6, 7, 11, 5, 12, 3, 0, 1}; System.out.println("之前:" + Arrays.toString(arr)); heapSort(arr); System.out.println("升序:" + Arrays.toString(arr

2020-06-29 13:04:23 87

原创 LeetCode209. 长度最小的子数组

题目给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的连续子数组,并返回其长度。如果不存在符合条件的连续子数组,返回 0。链接思路连续子数组,容易想到滑动窗口。注意一下窗口内元素的和的计算。右边界扩大时先移动边界后加上nums[right]左边界收缩时先减去nums[left]在移动左边界class Solution { public int minSubArrayLen(int s, int[] nums) { int l

2020-06-28 16:14:13 79

原创 LeetCode41. 缺失的第一个正数

题目给你一个未排序的整数数组,请你找出其中没有出现的最小的正整数。链接思路普通方法,set直接淦(/dog)class Solution { public int firstMissingPositive(int[] nums) { Set<Integer>set = new HashSet<>(); int res = 1; for(int num : nums){ set.add(num)

2020-06-27 11:18:57 102

原创 归并排序

public class MergeSort { void mergeArray(int[] arr, int left, int mid, int right, int[] temp) { //[left,mid],[mid+1,right]的下标指针 int i = left, j = mid + 1; //temp下标 int idx = left; //把这两段有序地放入temp while (

2020-06-26 14:03:19 86

原创 LeetCode剑指 Offer 57 - II. 和为s的连续正数序列

题目输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。链接思路以前做了都忘了,滑动窗口的印象不深。。滑动窗口右边界注意初始化为1或者2,别和二分的right搞混了。窗口始终向右移动,和较小右边界扩张,和较大右移左边界,直到左边界移动到阈值。//牛客啰嗦版本,有一说一ArrayList<ArrayList<Integer>>比数组好多了//但也好不到哪去。。publ

2020-06-25 15:35:55 87

原创 LeetCode16. 最接近的三数之和

题目给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。链接思路暴力,3个循环。。class Solution { public int threeSumClosest(int[] nums, int target) { Arrays.sort(nums); int len = nums.length; int

2020-06-24 11:59:53 88

原创 LeetCode面试题 16.18. 模式匹配

题目你有两个字符串,即pattern和value。 pattern字符串由字母"a"和"b"组成,用于描述字符串中的模式。例如,字符串"catcatgocatgo"匹配模式"aabab"(其中"cat"是"a",“go"是"b”),该字符串也匹配像"a"、"ab"和"b"这样的模式。但需注意"a"和"b"不能同时表示相同的字符串。编写一个方法判断value字符串是否匹配pattern字符串。链接思路不会。。看题解重新注释一般。。class Solution { int aCount;

2020-06-23 11:39:11 179

原创 JVM学习笔记

视频连接JVM体系结构JVM调优99%都在java方法区和堆。类加载器虚拟机自带加载器启动(根)类加载器扩展类加载器应用程序(系统)类加载器双亲委派加载类时,先往上层加载器(知道根加载器)走,如果上层加载器找到对应类,就直接加载,如果不能就传给下层。保证java系统定义类的安全.如果自定义java.lang.String,就会执行rt.jar包中的String,而不执行自定义的String沙箱安全机制Java安全模型的核心就是Java沙箱(sandbox) ,什么是沙箱

2020-06-22 21:14:06 146

原创 常量池的一些问题

几个常量池先看一下虚拟机的大体结构图自知乎class常量池class 文件结构图自知乎java类编译后,生成.class文件引自class文件中除了包含类的版本、字段、方法、接口等描述信息外,还有一项信息就是常量池(constant pool table),用于存放编译器生成的各种字面量(Literal)和符号引用(Symbolic References)。字面量:常量概念,如文字符串"abc"、被声明为final的常量值等。符号引用:一组符号来描述所引用的目标。符号可以是任何

2020-06-21 20:22:26 211

原创 LeetCode124. 二叉树中的最大路径和

题目给定一个非空二叉树,返回其最大路径和。本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。链接思路又是个dfs,要求是任意节点到另一节点的路径,可以只有一个节点,节点中可有负数。dfs计算每个节点的最大贡献值。对于叶子节点,最大贡献值即为其本身。对于非叶子节点,其最大贡献值即为其本身加上max(左子节点最大贡献值,右子节点最大贡献值)。由于左右两边贡献都有负数的情况,负数肯定不能再加,所以需要把负数转换为零。处理完节点的最大贡献值,就

2020-06-21 10:59:39 132

原创 LeetCode从先序遍历还原二叉树

题目我们从二叉树的根节点 root 开始进行深度优先搜索。在遍历中的每个节点处,我们输出 D 条短划线(其中 D 是该节点的深度),然后输出该节点的值。(如果节点的深度为 D,则其直接子节点的深度为 D + 1。根节点的深度为 0)。如果节点只有一个子节点,那么保证该子节点为左子节点。给出遍历输出 S,还原树并返回其根节点 root。链接思路先序遍历为根,左,右。记当前节点为 TTT,上一个节点为 SSS,那么实际上只有两种情况:TTT 是 SSS 的左子节点;TTT 是根节点

2020-06-18 12:44:59 278

原创 Tapd+腾讯工蜂+Jenkins持续部署

Tpad关联腾讯工蜂tapd,项目设置,流水线设置这个网址复制到:腾讯工蜂,项目,项目高级设置,网络回调钩子服务器安装git这里已安装,只是查看。git需要配置ssh秘钥,设置本地全局账户 $ git config --global user.name "xxx" $ git config --global user.email "你的邮箱"生成秘钥 $ ssh-keygen -t rsa -C "你的邮箱" # 运行上面命令后,连续按3个回车(如果不需要

2020-06-16 18:14:34 3439

原创 JUC笔记

视频链接1什么是JUCjava.util.concurent包,分类业务:普通线程ThreadRunnable 没有返回值,性能相较于Callable较低2进程和线程java 默认两个线程main 、GCjava不能真正开启线程并发与并行并发才存在多线程操作同一资源一个cpu核心快速交替执行多个线程。本质:充分利用cpu资源并行(多个进程同时执行)多个cpu核心,执行多个线程;线程池public static void main(String[] args) {

2020-06-16 14:55:03 157

原创 LeetCode297. 二叉树的序列化与反序列化

题目序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。请设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。链接思路广度优先的应用,只需在存储字符串的时候加分隔符。/** * Definition for a binary tree node. *

2020-06-16 10:35:49 130

空空如也

空空如也

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

TA关注的人

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