自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 哈夫曼编码(Java)

【代码】哈夫曼编码(Java)

2024-06-10 00:48:17 103 2

原创 BellmanFord算法

【代码】BellmanFord算法。

2023-09-18 03:34:50 160

原创 哈夫曼编码

哈夫曼编码的Java实现

2022-08-31 09:58:30 205 1

原创 BM96 主持人调度(二)

求最多线段重合的部分有多少条线段

2022-08-19 11:14:52 322

原创 小于 n 的最大数

递归算法题

2022-08-18 19:56:42 831 3

原创 前缀和总结

560. 和为 K 的子数组class Solution { public int subarraySum(int[] nums, int k) { int[] preSum = new int[nums.length]; preSum[0] = nums[0]; for(int i = 1; i < preSum.length; i++){ preSum[i] = preSum[i - 1] + nums[i];

2022-04-11 10:58:30 144

原创 穿越雷区(深搜、广搜)

广度优先算法:import java.util.LinkedList;import java.util.Queue;import java.util.Scanner;public class LanQiao29 { static boolean[][] isVisted; public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc..

2022-04-05 21:24:03 85

原创 Java IO

文件输入输出public class IOTest1 { /** * 最好不要用 throws 的方式。因为如果把字符流创建好了之后,在 read() 操作 * 的时候抛出异常导致程序终止了,那么就会导致这个字符流没有 close() 关闭掉 */ @Test public void test1() throws IOException { FileReader fr = new FileReader("E:\\test.txt");

2022-01-29 20:53:01 102

原创 Java 正则表达式

转义字符在我们使用正则表达式去匹配某些特殊字符的时候,需要使用转义字符,否则匹配不到任何字符常见的特殊字符:. * + () $ / \ ? [] ^ {}注:在 Java 中,两个 \\ 等同于其它语言中的一个 \public class Test1 { public static void main(String[] args) { // 匹配 ( String content = "abc.(123("; Pattern patter

2022-01-25 21:56:40 149

原创 手写平衡二叉树

public class AvlTreeTest { public static void main(String[] args) { AvlNode root = null; AvlTree tree = new AvlTree(); root = tree.add(3, root); root = tree.add(7, root); root = tree.add(2, root); root =

2022-01-23 21:20:58 327

原创 堆排序实现

public class DuiPaiXu { public static void main(String[] args) { int[] nums = {3, 7, 4, 9, 7, 2, 1, 6}; heapSort(nums); System.out.println(Arrays.toString(nums)); } public static void heapSort(int[] nums){ int n

2022-01-20 21:45:50 440

原创 二叉堆以及堆排序实现

二叉堆是一种特殊的完全二叉树,只不过它存储在数组中。(1)大顶堆:每个结点都大于等于它的两个子结点的二叉堆。(2)小顶堆:每个结点都小于等于它的两个子结点的二叉堆。如果根结点的下标是 0,那么对于某个结点 i:(1)其左结点下标:2 * i + 1(2)其右结点的下标:2 * i + 2(3)其父结点的下标:(i - 1) / 2大顶堆的实现:(1)swim():如果堆的有序状态因为某个结点变的比它的父结点更大而被打破,那么我们就需要通过交换它和它的父结点来修复堆。交换后,这个节点比它的两.

2022-01-20 20:28:05 99

原创 ThreadLocal

ThreadLocal 基础知识ThreadLocal 作用:在多线程并发场景下,ThreadLocal 为每个线程都提供了一个变量的副本,使得每个线程中的变量都是相互独立的,不会互相影响,避免了当前线程的变量被其他线程所修改ThreadLocal 常用方法:(1)set():将变量绑定到当前线程中(2)get():获取当前线程绑定的变量ThreadLocal 的设计:(1)每个 Thread 线程内部都有一个 Map(ThreadLocalMap)(2)Map 里面存储 ThreadLoc

2022-01-10 15:32:15 115

原创 枚举类、序列化

一、枚举类1.1 枚举类的特点如果枚举类中只有一个对象,则可作为一种单例模式的实现方式使用 enum 定义的枚举类默认继承了 java.lang.Enum 类枚举类的构造方法只能是私有的,只能使用 private 修饰,如果使用其他的访问权限修饰符修饰则会报错枚举类的所有对象都必须放在第一行显示列出,并且枚举类的所有对象默认被 public static final 修饰。多个对象之间用逗号 “,” 隔开,最后一个对象后面用分号 “;” 结束不需要使用 new 关键字,不需要显式地调用构造方

2022-01-06 15:35:41 2625

原创 JUC 并发编程

什么是 JUC?JUC 是 java.util.concurrent 工具包的简称基础知识public class Test12 { public static void main(String[] args) { /*for(int i = 1; i <= 10; i++){ new Thread(() -> { // 注:lambda 里面是里是拿不到 i System.o.

2021-12-23 16:39:46 177

原创 生产者消费者问题

基础知识o.wait() 方法:让正在 o 对象上活动的线程进入等待,并且释放该线程占有的锁。o.notiry() 方法:让正在 o 对象上等待的某个线程唤醒。o.notifyAll() 方法:让正在 o 对象上等待的所有线程唤醒。注:线程被唤醒以后会从上次等待的位置继续往下执行,也就是会接着执行 wait() 方法之后的代码。Conditon 接口中的 await() 对应 Object 中的 wait();Condition 接口中的 signal() 对应 Object 中的 notif

2021-12-12 16:23:49 221

原创 leetcode之二叉树中的最大路径和

当路径到达某个节点时,该路径既可以前往它的左子树也可以前往它的右子树,但如果路径同时经过它的左右子树,那么就不能经过它的父节点。class Solution { int maxSum = Integer.MIN_VALUE; public int maxPathSum(TreeNode root) { dfs(root); return maxSum; } // 返回以 root 为根结点的最大路径和 public int df..

2021-11-28 14:53:17 333

原创 leetcode之链表排序

147. 对链表进行插入排序class Solution { public ListNode insertionSortList(ListNode head) { if(head == null || head.next == null){ return head; } ListNode dummyHead = new ListNode(0); dummyHead.next = head; L

2021-11-25 10:07:00 259

原创 nSum 问题

注:本文总结自 labuladongtwoSum 问题给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出能够凑出目标值 target 的两个元素的值(注意:不是下标)。public int[] twoSum(int[] nums, int target) { Arrays.sort(nums); int low = 0, high = nums.length - 1; while(low < high){ int sum =

2021-11-15 21:46:14 551

原创 二分法专题

基本的二分搜索class Solution { public int search(int[] nums, int target) { int left = 0, right = nums.length - 1; // 区间为 [left, right] while(left <= right){ int mid = left + (right - left) / 2; if(nums[mid]

2021-11-06 21:16:51 119

原创 动态规划之子序列以及子数组类型的问题

300. 最长递增子序列class Solution { public int lengthOfLIS(int[] nums) { int[] dp = new int[nums.length]; // 以下标 i 为结尾的最长严格递增子序列的长度是 dp[i] Arrays.fill(dp, 1); for(int i = 1; i < dp.length; i++){ for(int j = 0; j < i

2021-11-04 14:23:10 192

原创 Redis

NoSql 数据库概述NoSql(Not Only SQL),即 “不仅仅是 SQL”,泛指非关系型数据库。NoSql 不依赖业务逻辑方式存储,而以简单的 key-value 模式存储,因此大大增加了数据库的扩展能力。NoSql 数据库的特点:(1)不遵循 Sql 标准。(2)不支持 ACID。(3)远超于 SQL 的性能。NoSql 适用场景:(1)对数据高并发的读写。(2)海量数据的读写。(3)对数据的高扩展性。NoSql 不适用的场景:(1)需要事务支持。(2)基于 sql

2021-11-03 15:29:19 500

原创 二叉树前中后层序遍历

前序遍历class Solution { public List<Integer> preorderTraversal(TreeNode root) { Stack<TreeNode> stack = new Stack<>(); List<Integer> res = new ArrayList<>(); TreeNode temp = root; while (!stac

2021-10-25 12:15:10 95

原创 字符串乘法

比如,我们可以将 123 * 45 分解为如下:

2021-10-20 20:12:34 211

原创 剑指 Offer 36. 二叉搜索树与双向链表

前驱结点:对一棵二叉树进行中序遍历,遍历后的顺序,当前结点的前一个结点为该结点的前驱结点;后继结点:对一棵二叉树进行中序遍历,遍历后的顺序,当前结点的后一个结点为该结点的后继结点;class Solution { Node pre = null, head = null; public Node treeToDoublyList(Node root) { if(root == null){ return null; } ..

2021-10-02 11:07:13 60

原创 JVM虚拟机上篇之内存与垃圾回收

1

2021-09-11 15:49:00 686

原创 LFU算法

/** LFU 算法:淘汰访问频次最低的元素,如果访问频次最低的数据有多条,则需要淘汰最旧的数据。* */class LFUCache { // 存放 key 到 val 的映射 HashMap<Integer, Integer> keyToVal = new HashMap<>(); // 存放 key 到 使用频次freq 的映射 HashMap<Integer, Integer> keyToFreq = new HashMap.

2021-09-11 13:47:18 418

原创 二叉堆以及堆排序

二叉堆是一种特殊的完全二叉树,只不过它存储在数组中。(1)大顶堆:每个结点都大于等于它的两个子结点的二叉堆。(2)大顶堆:每个结点都小于等于它的两个子结点的二叉堆。如果根节点的下标是 0,那么对于某个结点 i:(1)其左结点下标:2 * i + 1(2)其右结点的下标:2 * i + 2(3)其父结点的下标:(i - 1) / 2大顶堆的实现:(1)swim():如果堆的有序状态因为某个结点变的比它的父结点更大而被打破,那么我们就需要通过交换它和它的父结点来修复堆。交换后,这个节点比它的两.

2021-09-10 17:49:40 186

原创 LRU算法

哈希链表:双向链表和哈希表的结合体:/* * 最近最少使用算法(Least Recently Used,LRU) * 计算机的缓存容量有限,如果缓存满了就需要删除一些内容。 * LRU 就是认为最近使用过的数据是有用的,优先淘汰一段时间内没有使用的字块。 * 实现注意事项: * (1)cache 中的元素必须有时序,以区分最近使用和最久未使用的数据。 * (2)当容量满了之后要删除最久未使用的那个元素。 * (3..

2021-09-09 20:53:01 75

原创 拓扑排序基础

拓扑排序,直观地说就是把一幅图拉平,而且这个拉平的图里面,所有的箭头方向都是一致的。如上图:所有的箭头都是朝右的。很显然,如果一副有向图中存在环,是无法进行拓朴排序的。因为肯定做不到所有箭头方向一致;反过来,如果一幅图是有向无环图,那么一定可以进行拓扑排序。拓扑排序:在一个有向图中,对所有的结点进行排序,要求没有一个结点指向它前面的节点。实现步骤:先统计所有结点的入度,对于入度为0的结点就可以分离出来,然后把这个结点指向的结点的入度减一。一直做改操作,直到所有的结点都被分离出来。如果最后不存在入度..

2021-09-07 17:12:29 335

原创 idea 常用快捷键

快速生成main方法:psvm快速生成System.out.println:sout删除一行:Ctrl + yidea中退出任何窗口,都可以使用Esc建任何新增/新建/添加的快捷键:Alt + Insert窗口变大变小:Ctrl + Shift + F12自动补全代码:Ctrl+Shift+Space代码提示:Ctrl+空格切换java程序:Alt + 左箭头/右箭头切换窗口:Alt + 标号(Alt + 1、Alt + 2等)查看方法的参数:Ctrl + p双击Shift:全局搜索.

2021-09-07 08:57:28 43

原创 SpringMVC

一、SpringMVC 概述1.1 SpringMVC 简介SpringMVC:是 spring 框架的一部分,专门用来做 web 开发的。可以理解为 servlet 的一个升级。SpringMVC 能够创建对象,放到 SpringMVC 容器中。SpringMVC 容器里放的是控制器对象。我们要做的是使用 @Controller 创建控制器对象,把这个对象放入到 SpringMVC 容器中,把控制器对象当作控制器使用。这个控制器对象能接受用户的请求,显示处理结果,就当作是一个 servlet

2021-08-05 14:27:50 406

原创 操作系统笔记

2.3.2 进程互斥的软件实现方法单标志法算法思想:两个进程在访问完临界区后会把使用临界区的权限交给另一个进程。也就是说每个进程进入临界区的权限只能被另一个进程赋予。存在的问题:turn 表示当前允许进入临界区的进程号,而只有当前允许进入临界区的进程在访问了临界区之后,才会改变 turn 的值。也就是说,对于临界区的访问,一定是按 P0 -> P1 -> P0 -> P1… 这样轮流访问。这种必须轮流访问带来的问题是:如果此时允许进入临界区的进程是 P0,而 P0 一直不访问临界

2021-07-29 20:51:41 592

原创 动态代理基础

动态代理代理模式代理模式:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户类和目标对象之间起到中介的作用使用代理对象,是为了在不修改目标对象的基础上,实现对功能的增强。代理模式的作用的另一种表述:(1)功能增强:在你原有的功能上,增加了额外的功能。(2)控制访问:代理类不让你访问目标。例如:商家不让用户访问厂家。客户类真正想要访问的对象是目标对象,但客户类真正可以访问的对象是代理对象。客户类对目标对象的访问是通过访问代

2021-07-27 15:51:36 170

原创 一篇搞定 MyBatis

一、软件开发常用结构1.1 三层架构界面层(表示层,视图层):和用户打交道的,主要接受用户的请求参数,显示请求的处理结果(jsp、html、servlet)。业务逻辑层:接受了界面层传递的数据,计算业务逻辑,调用数据访问层获取数据。数据访问层(持久层):访问数据库,主要实现对数据的增、删、查、改。1.2 三层对应的包界面层: controller 包(servlet)业务逻辑层:service 包(XXXService 类)数据访问层:dao 包(XXXDao 类)1.3 三层中类

2021-07-12 17:25:04 646

原创 Git/Github

Git 概述Git 是一个免费的、开源的分布式版本控制系统,可以快速高效地处理从小型到大型的各种项目。Git 易于学习,占地面积小,性能极快,它具有廉价的本地库、方便的暂存区域和多个工作流分支等特性,其性能优于 Subversion、CVS、perforce 和 ClearCase 等版本控制工具。1.1 什么是版本控制版本控制是一种记录文件内容变化,以便将来查阅特定版本修订情况的系统。版本控制最重要的其实是可以记录文件修改的历史记录,从而让用户能够查看历史版本。1.2 为什么需要版本控制从个

2021-07-06 11:16:45 97

原创 一篇搞懂 Maven

传统开发项目(没有使用 maven)的问题:(1)很多模块,模块之间有关系,手动管理关系比较繁琐。(2)需要很多第三方功能,需要很多 jar 包,需要手工从网络中获取各个 jar 包。(3)需要管理 jar 的版本,比如你需要的是 mysql.5.1.5.jar,那你就不能拿一个 mysql.4.0.jar。(4)管理 jar 包之间的依赖。比如你的项目要使用 a.jar,a.jar 的使用需要用到 b.jar 里面的类,所以必须要先获取 b.jar,然后才能使用 a.jar。注:a.jar 需要

2021-07-03 11:29:59 220

原创 Spring5

Spring 框架概述Spring 是轻量级的开源的 JavaEE 框架。Spring 可以解决企业应用开发的复杂性。Spring 有两个核心的部分:IOC 和 Aop(1)IOC:控制反转,把创建对象的过程交给 Spring 进行管理。(2)Aop:面向切面,不修改源代码就能进行功能增强Spring 的特点:(1)方便解耦,简化开发(2)Aop 编程支持(3)方便程序设计(4)方便和其他框架进行整合(5)方便进行事务的操作(6)降低 API 开发难度(对里面很多东西进行了封装)

2021-07-03 09:34:23 274

原创 活动安排问题

活动安排问题:假设某社团某一天要组织n个活动 E = {1, 2, 3 … n},其中每个活动都要求使用同一礼堂,而且在同一时间内只有一个活动能使用这个礼堂。每个活动 i 都有一个要求使用礼堂的起始时间 si 和结束时间 fi, 且有 si < fi。若区间(si,fi)和(sj,fj)不相交,则称活动 i 与活动 j 是相容的。现在给定 n 个活动的开始时间和结束时间,请设计一个活动安排方案,使得安排的相容活动数目最多。/** * 思路: * 将活动按照结束时间进行从小到大排序。然后用i.

2021-06-28 17:16:00 1146

原创 JSON、AJAX、i18n

JSON 在 JavaScript 中的使用JSON 的定义JSON 是由键值对组成,并且由花括号包围。每一个键由引号引起来。键和值之间使用冒号进行分隔,多组键值对之间使用逗号进行分隔。// json 的定义var jsonObj = { "key1" : 12, "key2" : "abc", "key3" : true, "key4" : [11, "arr", false], "key5" : { "key5_1" : 51,

2021-06-26 17:25:30 113

空空如也

空空如也

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

TA关注的人

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