自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 一个数的所有连续自然数之和

* 题目描述:* 一个整数可以由连续的自然数之和来表示,现给定一个整数,计算该整数有几* 种连续自然数之和的表达式并打印出每一种表达式* 输入描述:* 一个目标整数t 1<= t <=1000* 1.该整数的所有表达式和表达式的个数* 如果有多种表达式,自然数个数最少的表达式优先输出* 2.每个表达式中按自然数递增输出* 在每个测试数据结束时,输出一行"Result:X"...

2022-03-29 15:21:37 1147

原创 乱序数组 删除所有重复元素 使得每个元素只出现一次 并且按照出现次数由高到低排序 相同出现次数 按照第一次出现的顺序进行先后排序(要求稳定)

思路:首要统计数组中每个元素出现的频次以及出现顺序(以第一次出现的为准) 创建一个结构体,包含: val count order 构造一个比较器确定比较规则(按照出现次数多少从大到小排序,出现次数相同则按照出现顺序order排序) public static int[] fx(int[] arr) { //收集节点信息 HashMap<Integer, Node> map = new HashMap<>(); int.

2022-03-29 14:45:59 2155

原创 一个Set解决二叉树任何节点间的距离问题

前提: 二叉树的每个节点都有一个指向夫节点的parent指针,遍历找到二叉树中想求距离的节点,将两个节点到根节点之间经过的所有节点存入set,那么set的大小就是距离.分析:无论是否经过头节点,无论怎样都是要汇集到头节点的 情况一: 不在同一子树,那么两边的路径只有根节点重合 情况二:在同一子树,必然有公用的节点,两条路径中选择任意一条将沿途节点存入...

2022-03-29 11:16:08 1002

原创 给定一个数组存储的二叉树,求根节点到最小叶子节点的路径

描述:以数组来存储二叉树,现给定一个数组树的根节点的值储存在下标1, 对于储存在下标n的节点,他的左子节点和右子节点分别储存在下标2*n和2*n+1并且我们用-1代表一个节点为空试求从根节点到最小叶子节点的路径,路径由节点的值组成思路: 1.将给定的数组先转换为二叉树,转换时添加一个向上的parent指针指向父节点 2.层序遍历所...

2022-03-29 10:01:56 2953 1

原创 迪杰斯特拉(Dijsktra)算法求到任意节点的最短路径

迪杰斯特拉算法要求 1.必须给一个起点,可求出起点到任何节点的最短路径,如果不可达那么距离设定为正无穷 2.输出一张表记录一个节点到任何节点的最短路径 3.dijkstra本质是一种贪心算法要求: 不能出现权值为负的边(如果沿途路径不能构成一个环那么也可以,但最好不要有)操作: 维护一...

2022-03-29 08:25:11 1872

原创 Prim算法之最小生成树

P算法思路: 给定任意一个节点,保证权值最小的情况下生成最小生成树,在确定一个节点后,在该节点的所有边中找到权值最小的,结果集加入这条边,然后使用这条边的to节点在解锁一些边,找出最小权值的边 ...对于解锁出的边存入小根堆中每次弹出最小权值的即为有效边 /** * 最小生成树(保持树的连通性,保证权值最小) * * P算法: * 首先需要指定一个节点,由一个点解锁一批边,挑出最小的,也是用优先队列 */ public s.

2022-03-29 04:16:11 261

原创 基于并查集的Kruskal算法求最小生成树

不了解并查集的可以看我之前写的: 👇https://blog.csdn.net/Smartbbbb/article/details/123623055?spm=1001.2014.3001.5501/** * 最小生成树(保持树的连通性,保证权值最小) * * K算法: * 思路: 将所有边按照权值排序,从最低权值的边开始,判断边两边的节点 * 是否在同一集合,不在union,在,放弃这条边 ... 直到遍历结束,使用 * 并查集解决,最终连成一片,因为并.

2022-03-28 14:02:23 173

原创 图的拓扑排序

拓扑排序常用于编译前依赖的编译,只有上一步做完下一步才可以进行 ...思路: 依次消除所有入度为0的节点,并消除其边的影响public static List<Node> topology(Graph graph){ //key 某一个节点 value 剩余的入度 HashMap<Node,Integer> inMap = new HashMap<>(); //只有入度为0的节点才可进入 Queu.

2022-03-28 11:38:20 138

原创 两种方式实现: 二叉树深度优先(BFS),统计二叉树最大宽度

* <pre>* 二叉树的层序遍历** '1'* | |* '2' '3'* | | | |* 4 '5' 6 7'* | | ...

2022-03-26 11:51:09 1186

原创 二叉树层序遍历

基本思路: 头节点先入队,poll()则打印,如果有左有孩子,入队 .... //层序遍历 public static void levelVisit(Node node){ Queue<Node> qe = new LinkedList<>(); qe.add(node); while (!qe.isEmpty()){ Node cur = qe.poll(); ..

2022-03-26 11:41:54 617

原创 二叉树的前序,中序,后序的遍历(非递归/递归实现)

1.非递归遍历二叉树 //先序遍历 先push right再push left,目的是先处理left节点 弹栈就打印 public static void prefix(Node node) { System.out.print("pre-order: "); Stack<Node> stack = new Stack<>(); stack.push(node); while (!stack.em..

2022-03-26 06:44:53 1000

原创 单调栈: 找出数组中任意位置左右两边比它大的数字

* 单调栈: 找出任意一个位置,左边比它大的及右边比它大的* {5 4 6 7 2 3 0 1}* 如5左边无右边是6描述: 找出数组中任意位置上,左右两边比它大的数字,左右没有输出 " 无 ", 否则就打印.操作时利用栈结构实现,索引从0开始,如果栈为空直接push,不为空比对栈顶数据和要push的值,如果栈顶的小于要压入的数据,那么就弹出,一直弹出到遇到比它大的栈顶元素停止,接着push就行.需要注意的是,在push过程中由于要将遇到的小的栈内元素弹出,弹出时是需要打印信息的,因为弹出行为...

2022-03-26 03:34:21 551

原创 滑动窗口 (双端队列实现)

滑动窗口: 使用双端队列实现,双端队列的作用是保证每次L边界右移时从队列头弹出的都是当前窗口的最大值.操作: 1.给定一个限制为k的窗口大小,L,R分别代表窗口左右边界,L和R只能向右移动,当R触碰到数组长度极限时结束. ...

2022-03-26 00:46:41 748

原创 给定一个栈,仅利用栈自身的结构逆序栈,不能借助其它数据结构

不借助其它数据结构,仅使用给的一个栈实现栈的逆序,听起来不可思议!其实是可以借助递归时系统压栈的方式(即栈帧存储数据)来实现逆序.操作:1.使用 f() 函数每次抽取出栈底的元素且弹出,那么就可以将栈中所有的元素按逆序的方式拿到 2.reverse() 函数也利用系统压栈,当达到调用链尽头,这时栈帧中p变量存储的就是原来栈顶的元素,并且此时栈已经空了(因为栈为空是 base case 即:终止条件),那么压栈返回,压栈返回... 就会将栈逆序.小结: 虽然在代码层面并没有利用给定栈的其它数据结.

2022-03-21 20:48:26 638

原创 图的结构 .图的广度优先遍历(BFS),深度优先遍历(DFS)

1.图的构成 1.边集 2.点集

2022-03-21 14:42:29 516

原创 并查集实现

并查集用于解决关联性问题,可以合并不同的集合,判断是否属于同一集合. 根据业务场景应用很广,比如是否属于同一省份,或根据不同信息判定是否属于同一个人...并查集结构: 如下UnionSet 结构** * 并查集的结构的重要性,解决一切联通性的问题,是不是同一个用户,是否属于同一个集合 */public class UnionSetFind { public static void main(String[] args) { Integer[] arr = {1,3,

2022-03-20 22:18:41 521

原创 能安装多少灯可以照亮所有区域?

** * 给一个字符串,只由x和.构成 * x 代表墙不能装灯 * .代表居民点,可以装灯 * 如果灯放在i位置可以让 i-1 i i+1位置被点亮,返回需要点亮所有区域至少需要多少灯 *public class LightsNumber { public static void main(String[] args) { String str = "...x..xxx.x..x."; //String str = "x.x.xx...xxx....

2022-03-20 18:17:28 165

原创 O(N)时间复杂度copy一个含有随机指针的链表

* * 复制含有随机指针的链表 * * 思路1: 每遍历一次旧节点存入到map一个新的节点(不需要设置),然后依据来节点的指向设置 * 思路2: 复制节点,由原节点指向,然后拆分 * * 箭头矢代表random指向 * -------> * 7 23 3 4 56 * <--- * //思路1: 每遍历一次旧节点存入到map一个新的节点(不需要设置),然后依据来节点的指向设置 public Node ..

2022-03-18 10:57:55 711

原创 时间复杂度O(n)的回文链表判断算法, 额外空间复杂度O(1)

/** * 判断链表是否为回文: * 利用链表逆序的思路,将中点之后的指针反序指向中点,从两头走 * 直到走到null依旧没有返回false,那就是会回文 * * 2 -> 6 -> 9 <- 6 <- 2 * | * null * slow = head * fast = head *///反转后一半链表前后比对,然后调整好指针 priv..

2022-03-17 17:08:46 720

原创 链表的回文问题: 全压栈 与 半压栈

/** * 基于栈判断是否为回文 * 1.使用栈: 所有节点依次入栈,弹出一个与原链表或字符比对有一个不对,不是回文 * 2.使用栈: 利用快慢指针找到链表中点,以slow下一个开始压入栈中,弹出比对,栈为空停止 *///遍历链表全部放入栈中,弹出比对 public static boolean isPalindrome1(Node head){ if(head == null){ return false; ...

2022-03-17 14:22:37 419

原创 基数排序 桶排序(详细注解)

import java.util.Arrays;/** * 桶排序 */public class BucketSort { public static void main(String[] args) { int[] arr = {1092, 98, 24, 222, 1, 8, 77}; radixSort(arr); System.out.println(Arrays.toString(arr)); } public s.

2022-03-16 18:36:38 433

原创 一个近乎有序的数组,每个元素移动的距离一定不会超过k,进行排序

/** * API提供的堆,优先级队列 * * 已知: * 一个近乎有序的数组,几乎有序是指,如果把数组排好序的话,每个元素移动的距离一定不会超过k * 并且k相对与数组长度来说是比较小的 */public class ApiHeap { public static void main(String[] args) { //一个近乎有序的数组,使其元素达到该去的位置步数不超过k int[] arr = {1,4,5,6,3,5.

2022-03-15 18:04:30 620

原创 数组 单向链表 双向链表 栈 队列小思考

1. 单项链表: 只有头节点,对其进行操作时需要时刻考虑下次操作时节点是否还在.通常需要先记录下一个节点,然后再操作.对于一些不会改变链表指向的操作通常返回的是头节点,而对于像反转链表这样的操作就需要返回新的头,这个头通常为操作时使用的prev节点.2. 双向链表: 只有一个头,只不过每个节点有指向前一个和后一个节点的指针,用于定位节点的前一个或或一个节点,在对其进行操作时需要考虑前后指针的指向该如何处理3. 单双链表的逆序问题: 对于单链表逆序时将指针往回指就可实现逆序.对于双向链表只不过.

2022-03-13 14:25:53 1062

原创 使用队列结构实现 栈结构

* 使用队列结构实现栈结构* 即: 外部表现的是一个栈** 操作:* 两个队列: dataQueue 和 helpQueue ,* push进data,pop时先pop出data中的数据剩下一个弹出,弹出的数据进入入队列help, * 下一轮需要交换dataQueue和helpQueue的角色,重复以上操作即可FILO*需要注意的问题: push操作永远都是往dataQueue中,因为涉及到每次pop时, 需要先使用 ...

2022-03-13 13:41:48 402

原创 使用栈结构实现 队列结构

使用栈结构实现队列结构,即: 外部表现的是一个队列操作: 1.准备两个栈: push pop, push栈负责数据的首次存储,pop栈负责弹出以达到队列的效果 2.只要pop栈不为空,不能pushToPop可能出现的问题:压栈到pushStack时,由于popStack已经不为空了,那么就需要后续在进行pop或者 peek时执行 pushToPop操作,即让pushStack中的数据倒入popStack中public class StackImplem...

2022-03-13 12:38:14 369

原创 基于数组实现: 栈 队列

* 栈和队列实现:* 1.双向链表实现* 2.数组实现** 基于数组实现public class StackOrQueueBaseOnArray { /** * 数组实现栈: * 1.只要满了报异常 * 2.没满保证正确性 */ public static class ArrayStack{ private int index; private final...

2022-03-13 12:36:09 693

原创 返回栈中最小元素

/*** 实现一个特殊的栈,在基本功能上实现返回栈中最小元素的功能* 1.push,pop,getMin的时间复杂度为O(1)* 2.可以使用现有的栈结构* 操作:* 使用两个栈,一个最小栈,一个数据栈*/public class TheMinNumberInStack { private final Stack<Integer> dataStack; private final Stack<Integer...

2022-03-13 11:06:16 389

原创 基于双向链表实现: 栈 队列

基于双向链表实现栈与队列: 内部类DoubleLinkedList<T> 可以构建双向链表, 提供4中操作: 头插 ,头取 ,尾插 ,尾取 .所以可以称为"双端双向链表"(自己起的 便于理解),这两端分别由head 和 tail 分别引用.通常链表无论是单向还是双向链表都只有一个 head, 但为了实现基于"双端双向链表"的 "栈" 和 "队列",这四种操作头插 和 头取 就是 "栈" ,头插 尾取就是"队列". 栈和队列都是逻辑上的结构,在数据结构中是...

2022-03-13 06:33:51 1708

原创 单链表 双链表: 生成,反转,遍历,删除

/** * 链表的操作 */public class ReverseOfLink { public static void main(String[] args) { int[] arr = {3, 3, 3, 2, 5, 8, 3, 5, 3, 3, 3, 9}; //Node head = generateDualLike(arr); Node head = generateSingleLike(arr); //lis...

2022-03-12 14:14:46 374

原创 位运算的骚操作

/** * 位运算骚操作 */public class BitOperation { public static void main(String[] args) { //bitOpeExchangeNum(); int[] arr = {1, 1, 1, 1, 2, 2, 2}; //extractEvenOdds(arr); extractTheRightBit1(248); int[] ftn = {3...

2022-03-12 02:49:23 297

原创 局部最小

package com.kali.zuo;/** * 局部最小(一个无序相邻不等的数组): * 1.如果第一个数比第二个数小直接返回第一个 * 2.如果开始为下降趋势,结尾为上升趋势,那么中间必然存在局部最小 * 如图所示: * * <pre> * - * - - - * - - - * - * </pre> */p.

2022-03-12 01:35:33 145

原创 RabbitMq小结

rabbitmq的一些自己的总结:小结: 消费者消费消息需要确认应答,没有确认应答消息就不会被删除,那么消息发布不正常消息就会丢失,这样是有问题的 消息在正常情况下被消费并确认应答了,那么消息会被删除,但是有些情况如:消息在TTL内因为消费端的问题,没有 被及时消费消息就会被丢弃,消息被拒,消息会丢失,队列达到最大不能进入队列,这些消息会成为死信,对这些死信 处理到一个专门的队列就是死信队列,由消费者再消费就可保证消息不丢失 死信原因之一:消息被拒绝(bas.

2022-02-26 18:32:21 1340

原创 Restful风格的请求

在请求路径相同("/system/basic/joblevel")的情况下,依据请求方法的不同匹配不同的后端接口.GET:获取数据POST: 添加数据PUT: 修改数据DELETE: 删除数据@RestController@RequestMapping("/system/basic/joblevel")public class JoblevelController { @Autowired private Joblevel...

2022-02-19 12:21:33 858

原创 Mybatis体系

Mybatis: ORM(对象/关系映射),ORM框架把对持久化对象POJO的操作转化为对数据库表的操作. Mybatis的着力点在于POJO与SQL之间的映射关系.ORM: 在所有的ORM框架中都有一个重要的媒介,PO(持久化对象).持久化对象的作用就是完成持久化 操作,简单的说,就是通过该对象可对数据库执行增删改的操作,以面向对象的方式操作数据库 应用程序无需直接访问数据库,甚至无序理会底层采用什么数据库,应用程序只需要创建,修改, 删除持久化对象即可,与此同时Mybatis则负责将这些.

2022-02-18 12:49:48 568

原创 通过node创建web服务器

通过node创建web服务器创建node项目,安装express,通过express创建web服务器,将vue-cli打包成的dist文件夹托管为静态资源即可创建node项目创建过程: 1.创建空项目如 Vue-Server空项目,运行 npm init -y 初始化 2.运行 npm install express -S 安装 express 3.将要发布的资源目录,一般为 dist 目录托管到初始化后的 Vue-Server根目录下 4.创建 app.js 服务器配置文件(配置文.

2022-02-12 10:00:48 500

原创 Vue组件通信 小结

组件通信小结组件通信的方式:1.最基本的组件交互/组件通信方式 props: props可以实现组件之间的数据(属性or方法)传输,但是对于跨级的 数据传输依然需要逐层传递与接收,所以缺点就是不需要数据的组件 依然需要承担数据传输的责任,导致组件标签上绑定了太多的传值属 性这种方式也就是需要"自定义标签属性"来实现传递数据 props应该注意的地方: a

2022-01-26 13:22:44 812

原创 Vue知识点 笔记

##M V VMM 模型 dataV 视图 模板VM 模型视图 Vue实例##vue可以实现1.数据绑定,数据响应式 v-model v-text …2.属性动态绑定 :attribute3.样式动态绑定 :style={} 用json对象绑定4.基本事件的绑定 @click5.循环遍历输出数组 item in var##vue1.采用组件化模式,提高代码复用率,且代码易于维护2.声明式编码,无需直接操作DOM,提高开发效率v-model只用于输入类元素:表单类元素,v-

2022-01-25 19:54:16 1607 1

原创 并发:解决安全的“ 读 改 写 “

1.java对并发问题的应对: 1.为了使多线程程序的行为可预见,访问共享变量必须经过合理的协调,这样线程才不会 相互干扰.所以java提供了同步机制来协调这样的访问 2.线程运行时仍然会带来一定程度上的开销:上下文切换(Context Switches),当调度程序 临时挂起当前运行的线程时,另一个程序开始运行---这在多线程组成的应用程序中是很频 繁的,并且带来巨大的性能开销:保存和恢复线程执行的上下文,离开执行现场,并且CPU的 时间会花费在对线程的调...

2022-01-12 17:48:13 2061

原创 Prototype 原型模式之深 克隆 与浅 克隆

浅克隆和深克隆的主要区别在于是否支持引用类型的成员变量的复制。1.浅克隆在浅克隆中,如果原型对象的成员变量是值类型,将复制一份给克隆对象;如果原型对象的成员变量是引用类型,则将引用对象的地址复制一份给克隆对象,也就是说原型对象和克隆对象的成员变量指向相同的内存地址。简单来说,在浅克隆中,当对象被复制时只复制它本身和其中包含的值类型的成员变量,而引用类型的成员对象并没有复制,在Java语言中,通过覆盖Object类的clone()方法可以实现浅克隆。2.深克隆在深克隆中,无论原型对象的成员变

2022-01-06 10:56:32 631

原创 静态内部类实现单例

饿汉式单例类不能实现延迟加载,不管将来用不用始终占据内存,懒汉式单例类线程安全控制烦琐,而且性能受影响静态内部类实现单例模式就可以克服以上两种单例模式的缺点,如下所示????public class Singleton { private static class HolderClass{ private static final Singleton instance = new Singleton(); } public static Singl

2022-01-05 09:49:06 4112

空空如也

空空如也

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

TA关注的人

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