自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 代码随想录算法训练营第十三天| 239.滑动窗口最大值、347.前K个高频元素。

队列里的元素一定是要排序的,而且要最大值放在出队口(front)。其实队列没有必要维护窗口里的所有元素,只需要维护有可能成为窗口里最大值的元素就可以了,同时保证队列里的元素数值是由大到小的。对于窗口里的元素{2, 3, 5, 1 ,4},单调队列里只维护{5, 4} 就够了,保持单调队列里单调递减,此时队列出口(front)元素就是窗口里最大元素,即5。

2023-03-27 19:30:52 131

原创 代码随想录算法训练营第十、十一天| 232.用栈实现队列、225.用队列实现栈、20.有效的括号、1047.删除字符串中所有相邻重复项、150.逆波兰表达式求值。

有两个方向。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mkJTAMd6-1679901797712)(https://code-thinking.cdn.bcebos.com/gifs/232.用栈实现队列版本2.gif)]只有一个方向:将元素从入栈移动到出栈。

2023-03-27 15:25:17 133

原创 代码随想录算法训练营第九天|双指针小结

双指针法在数组、链表、字符串中常见。

2023-03-25 11:23:07 167

原创 代码随想录算法训练营第八天| 344.反转字符串、541.反转字符串II、替换空格、151.翻转字符串里的单词、左旋转字符串。

借助ArrayList集合,将s中的每一个单词按序放入list集合中。再倒序遍历list集合,得到最终的结果。对于线性数据结构,填充或者删除,后序处理会高效的多。i指向新长度的末尾,j指向旧长度的末尾。先整体反转,再局部反转。剑指offer 05。剑指offer 58。

2023-03-25 10:59:41 143

原创 代码随想录算法训练营第七天| 454.四数相加II、383.赎金信、15.三数之和、18. 四数之和。

与四数之和进行对比。这道题不用考虑去重。ABCD四个数组中的元素都为0,要想A[i]+B[j]+C[k]+D[l]=0,其0可以取自数组的不同位置。A=[0,0] B=[0,0] C=[0,0] D=[0,0],因此result=[0,0,0,0]/[0,0,0,1]/[0,0,1,1]等。数组 or set or map?不仅要统计是否出现某个值,还需要统计它出现的次数。

2023-03-25 10:30:05 68

原创 代码随想录算法训练营第六天| 242.有效的字母异位词、349.两个数组的交集、202.快乐数、1. 两数之和。

std::unordered_set底层实现为哈希表,std::set 和std::multiset 的底层实现是红黑树。红黑树是一种平衡二叉搜索树,所以key值是有序的,但key不可以修改,改动key值会导致整棵树的错乱,所以只能删除和增加。std::unordered_map 底层实现为哈希表,std::map 和std::multimap 的底层实现是红黑树。同理,std::map 和std::multimap 的key也是有序的(这个问题也经常作为面试题,考察对语言容器底层的理解)。

2023-03-20 12:27:55 54

原创 代码随想录算法训练营第四天| 24.两两交换链表中的节点、19.删除链表的倒数第N个节点、链表相交、142. 环形链表。

24[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-R2X3g0b3-1679135821308)(C:\Users\leodu\AppData\Roaming\Typora\typora-user-images\image-20230318104151358.png)]

2023-03-18 18:40:08 55

原创 代码随想录算法训练营第三天| 203. 移除链表元素、707. 设计链表、206. 反转链表

203分类讨论:处理头节点是val;处理不是头节点是val。参考题解:等有空了,去思考一下递归的做法。

2023-03-18 10:34:06 83

原创 代码随想录算法训练营第二天| 977. 有序数组的平方、209. 长度最小的子数组、59.螺旋矩阵

977顺便借助这道题回忆一下各种排序算法。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-55UE6BcT-1678963109988)(https://code-thinking.cdn.bcebos.com/gifs/977.有序数组的平方.gif)]双指针做法有点快排的感觉。无拓展题目。

2023-03-16 18:41:23 410

原创 代码随想录算法训练营第一天| 704. 二分查找、27. 移除元素

当数组中元素是唯一时。每次划分区间,每次形成两个区间和一个mid。如果mid!= target,那么target一定在左区间或者是右区间。不断的进行划分,缩小,最终找到target。体现在代码中,需要注意的点:①left/right的初始值(想清楚区间的定义)②while中的条件循环的退出条件是当搜索区间为空时,不再划分区间。③每一次划分的过程中,left和right应该如何移动值唯一可能不太能体现思想。mid已经搜索过了,再去分别搜索[left,mid-1]和[mid+1,right]。

2023-03-15 20:34:38 659 1

原创 二叉树相关算法(二)——遍历的应用

一、统计二叉树的最大宽度(按层遍历)1、使用map2、不使用map二、序列化与反序列化1、按层2、先/中/后三、打印二叉树(右中左)四、求前驱与后继中序五、折纸(先序遍历“虚拟二叉树”)...

2021-05-17 15:32:23 189

原创 异常——finally与return

一、情况的分类1、从代码结构看:finally中进行return与不进行returnps: 如果代码中只有一处return,只能出现在finally中或者整个try catch finally框架之外。2、是否在finally中改变变量值二、案例说明自定义描述术语:return生效:因为在try catch finally框架中,很有可能出现准备返回但未返回的情况(因为必须执行finally中的代码),不同位置上的return语句生效的情况不一样。假设:存在两处return,一处retur

2021-04-20 16:37:20 259

原创 lambda表达式

一、JDK8为什么引入lambda表达式理论名词:函数式接口/函数式编程在代码运行过程中,可以自行判断参数类型。案例说明:从一个Student集合中,取出符合要求的元素。Student.java:public class Student { private String name; private int age; private int score; public Student() { } public Student(String nam

2021-04-13 16:58:20 106

原创 网络编程-TCP案例

一、实现客户端向服务端发送一条消息server.java:public class Server { public static void main(String[] args) throws IOException { //开放本地端口,等待客户端的连接 ServerSocket serverSocket = new ServerSocket(8888); //需要接受客户端传输过来的数据,所以需要Socket对象 Socket

2021-04-10 03:04:18 383

原创 二叉树相关算法(一)——二叉树的遍历

一、先/中/后序遍历(递归)递归方式会导致每个节点会经过三次,先序是在第一次经过节点时访问,中序是第二次经过节点时访问,后序是第三次经过节点时访问。其中较为特殊的是叶子节点,左孩子和右孩子都为空,访问空树时什么都不做就返回。public static void p(Node h) { if(h == null) return; else { System.out.print(h.val); //遍历左子树 p(h.left); //遍历右子树 p(h.right.

2021-03-06 23:42:21 240

原创 二叉树相关算法(三)——二叉树的递归套路

一、重要说明1、递归是一种思想,将这种思想落实到二叉树这种数据结果的相关运用上,使我更加了解递归的作用。2、以下所举的算法例子主要都是基于后续遍历的基础上实现的,即先遍历左子树,再遍历右子树,最后访问根节点,对于每一棵树都是如此。可以认为,递归方式可以从左/右子树上收集信息,从而在根节点处进行汇总。3、递归分为在递去的过程中解决问题以及在归来的过程中解决问题。因为我想要的信息是从底层往上给(可以是叶子节点,也可以是空节点-》结束/返回条件),所以是在归来的过程中解决问题。4、方法论:(可以指导对问.

2021-03-06 21:57:30 349

原创 Java后端所要掌握的前端知识——HTML篇

一、前端总体概述1、Web三要素浏览器(前端所学)、服务器(servlet)、HTTP协议。HTTP和HTTPS协议: HTTPS加密传输(网址中不会携带一些私密信息)。2、需要学的内容(1)HTMLXML:可扩展的标记语言,传输的一种数据格式(解析极其麻烦,故而改用json格式进行数据的传输)HTML:超文本标记语言二、HTML概述关注点: 常用的标签,属性,常用的样式(style)1、元素 = 标签 + 内容(后期会需要获取指定的元素)2、...

2020-08-05 10:57:17 2085

原创 Java中的线程(中)——同步与异步、锁机制、死锁

一、线程的同步、异步和手动锁1、概念:单线程与多线程(1)单线程:one 每次只能做一件事情,要一件接着一件事情去做。(2)多线程(并发):>=two 会发生多个线程抢占资源的现象,只有当抢占到资源之后,才会去执行。在多线程的前提下,为了防止资源的冲突问题,提出了同步与异步的概念。同步与异步(1)同步:就像是一群人排队上公交车,一次只能上一个人,前面人上了之后后面的人才能接着上去(一件事情做完了之后才能去做另外一件事情)(2)异步:就像是一群人上卡车,可以从卡车的周围同时上去(很多事情

2020-06-24 16:46:57 1161

原创 Java中关于XML的创建与解析

一、什么是XML?定义:可扩展的标记语言,是独立于硬件和软件的一种信息传输工具,一般用于web应用程序中。使用场景:框架的配置文件(*.xml)以前,前端与后端之间的数据交互使用的就是XML,由于其的不便利性,如今已改为使用JSON(传输工具)。二、XML文件中的内容说明注意:1、第一行是XML的指令。2、元素的名字可以自定义,根元素只能有一个,根元素中可以有多个子元素。三、解析XML文件目的:为了获取具体的name、job内容。此时需要用到第三方jar包(dom4j.jar):

2020-06-23 00:42:44 481

原创 Java中的线程(上)——概述、实现、生命周期、常用的方法、优先级

一、线程概述在现实生活中,万物可以同时进行多项活动,比如说,人,可以一边学习,一边听音乐,一边呼吸,一边进行血液循环。在Java世界中,可以把每一项活动理解为一个线程,而在一个时间段内,同时进行多项活动的行为就可以理解为线程并发。Java语言提供了并发机制,程序员可以在程序中执行多个线程,每一个线程完成一个功能,并与其它线程并发执行,这种机制被称为多线程。Java中的多线程在不同操作系统中的运行方式存在差异,在此说明多线程在Windows操作系统下的运行模式。1、程序指令+数据的byte序列,比如

2020-06-22 14:58:42 233

原创 Java中的IO流(中)——字符输入输出流

字节流操作中文不是很方便,故java提供了转换流。即:字符流 = 字节流 + 编码表。一、编码规则1、常见的编码表ASCII:美国国家信息标准码ISO-8859-1:拉丁码(识别不了中文)GBK/GB2312/GB18030:简体中文BIG5:繁体中文Unicode:支持世界上所有语言的编码(UTF-8 UTF-16 UTF-32)2、乱码乱码是由于编码与解码时使用的编码表不一样。3、将String编码为字节序列public class Demo01 { public static

2020-06-17 17:27:51 536

原创 Java中的IO流(下)——序列化与反序列化

一、引入Case 1:把ArrayList集合中的字符串数据存储到文本文件中public class Demo04 { public static void main(String[] args) { //创建集合 List<String> list = new ArrayList<String>(); //加入元素 list.add("时间有泪"); list.add("年轮"); list.add("凉凉"); BufferedWriter b

2020-06-15 01:06:01 231

原创 Java中的IO流(上)——File文件类、字节输入输出流详解

IO流,即用来操作文件内容的技术。所以再讲IO流之前,要先认识一下File类。一、File文件类1、创建文件对象2、对文件进行一系列操作3、创建文件夹以及对文件夹的操作二、IO流1、IO流概况2、...

2020-06-14 13:35:25 1142

原创 Java中的集合:List、Set、Map集合详解

一、关于集合的背景概况1、为什么会产生集合?集合可以类比到数组,都是储存多个数据的容器。数组:长度不可变,在定义时就已经指定其长度(巴士)集合:长度可变(火车,可以加车厢)所以,在使用层面上来说,使用集合会比使用数组更加便利。2、集合类概述说明:Collection是List和Set的父接口List和Set同样也是接口List常用的实现类:ArrayList和LinkedListSet常用的实现类:HashSet和TreeSet插入:Collection(集合名称) Collec

2020-06-11 20:01:13 473

原创 Java中的泛型&自定义比较器

一、泛型1、定义:用来限制类型。用在集合中,就会约束该集合中元素的数据类型。以在集合中的使用为背景举例:List<String> list = new ArrayList<String>();list.add("晴天");//list.add(10); //发生编译错误说明: <>中放"String",则放入该集合中的元素必定为String类型List list = new ArrayList();list.add("晴天");list.add(1

2020-06-09 16:54:48 591

原创 Java中的Math类与日期类(万年历的参考知识)

一、Math类二、日期类

2020-06-05 17:31:48 297

原创 Java中的内部类(4个)

匿名内部类含义: 在类中定义一个没有名称只有类体的类。使用情况:(1)抽象类(2)接口成员内部类局部内部类静态内部类(静态成员内部类)

2020-05-29 18:14:39 317

原创 Java面向对象的三大特性——继承、多态、封装

一、继承关键字:extends1、定义:子类继承父类,就会继承父类所有非私有属性。所以在设计父类与子类时,将子类共有的特点(属性)和行为(方法)抽离出来定义为父类。将子类特有的特点(属性)和行为(方法)定义在子类中,其他的则使用父类中的。2、方法的重写:(1)重载(overload):条件: 方法名相同,参数列表不相同,与返回值类型与访问修饰符无关。(2)重写(override):如果子类中有和父类相同的方法,那么就会调用子类的方法,父类的方法就会被覆盖。条件: 方法名、参数列表以及

2020-05-28 22:54:29 279 6

原创 面向对象概念性的知识

1、类与对象(1)类:是同一类事物的统称。组成:属性对应特点,方法对应行为。(2)对象:具体存在的事物。(万物皆对象)设计类时,要抽离出面对的对象的共同的特点(属性)以及行为(方法)。2、成员变量&成员方法&局部变量(1)成员变量:也就是全局变量。注意点:如果全局变量未进行初始化或者赋值,就会有默认值,int:0 double:0.0 boolean:false String:null还有一种特殊情况(数组):public class Person { public s

2020-05-28 16:42:17 207

原创 Java参数的传递方式:值传递

知识概况1、对于基本数据类型和String类型来说,传递的值是具体的值。2、对于引用数据类型来说,传递的值,是对象的地址。注意:Java中方法的参数传递只有值传递,对于引用数据类型来说,地址值是不会改变的,但是可以改变对象中的内容举例:1、public class Person { public static void main(String[] args) { int num = 6; Person.changeNum(num); System.out.println(num)

2020-05-25 16:09:17 190

原创 抽象类与接口——知识层面及使用层面

(一)知识层面1、抽象类(1)定义:用abstract修饰的类,表示一种抽象的类型。为什么Java中要有这种抽象的类型呢?举个例子,当你要写一个动物类时,所有动物的年龄等属性的定义方式是确定的,但是“吃”“叫”之类行为的实现方式是不相同的。这时可以将这些行为(方法)定性为抽象,子类继承抽象类之后,再去具体实现这些抽象方法。一个类中只要存在抽象方法,那么这个类一定是抽象类。(2)规范:1、抽象类中既可以有抽象方法,也可以有非抽象方法。抽象方法:只知道要做一件事情,但是不知道具体怎么做。没有方

2020-05-25 15:29:11 293

原创 Object类中的四个方法(getClass()、toString()、hashCode()、equals())

Object类下方法的作用1、getClass():返回对象执行时的实例,也就是获取变量的类型。返回结果形式为:class 包名 类名。2、toString():将对象返回为字符串的形式。说明:在代码中,如果用输出语句直接输出对象,将会自动调用 toString()方法。public class ObjectDemo01 extends Object{ public static void main(String[] args) { //创建可以装任意类型数据的数组 Object[] ar

2020-05-24 23:09:08 940

空空如也

空空如也

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

TA关注的人

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