- 博客(32)
- 收藏
- 关注
原创 代码随想录算法训练营第十三天| 239.滑动窗口最大值、347.前K个高频元素。
队列里的元素一定是要排序的,而且要最大值放在出队口(front)。其实队列没有必要维护窗口里的所有元素,只需要维护有可能成为窗口里最大值的元素就可以了,同时保证队列里的元素数值是由大到小的。对于窗口里的元素{2, 3, 5, 1 ,4},单调队列里只维护{5, 4} 就够了,保持单调队列里单调递减,此时队列出口(front)元素就是窗口里最大元素,即5。
2023-03-27 19:30:52
190
原创 代码随想录算法训练营第十、十一天| 232.用栈实现队列、225.用队列实现栈、20.有效的括号、1047.删除字符串中所有相邻重复项、150.逆波兰表达式求值。
有两个方向。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mkJTAMd6-1679901797712)(https://code-thinking.cdn.bcebos.com/gifs/232.用栈实现队列版本2.gif)]只有一个方向:将元素从入栈移动到出栈。
2023-03-27 15:25:17
185
原创 代码随想录算法训练营第八天| 344.反转字符串、541.反转字符串II、替换空格、151.翻转字符串里的单词、左旋转字符串。
借助ArrayList集合,将s中的每一个单词按序放入list集合中。再倒序遍历list集合,得到最终的结果。对于线性数据结构,填充或者删除,后序处理会高效的多。i指向新长度的末尾,j指向旧长度的末尾。先整体反转,再局部反转。剑指offer 05。剑指offer 58。
2023-03-25 10:59:41
186
原创 代码随想录算法训练营第七天| 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
94
原创 代码随想录算法训练营第六天| 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
83
原创 代码随想录算法训练营第四天| 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
77
原创 代码随想录算法训练营第三天| 203. 移除链表元素、707. 设计链表、206. 反转链表
203分类讨论:处理头节点是val;处理不是头节点是val。参考题解:等有空了,去思考一下递归的做法。
2023-03-18 10:34:06
105
原创 代码随想录算法训练营第二天| 977. 有序数组的平方、209. 长度最小的子数组、59.螺旋矩阵
977顺便借助这道题回忆一下各种排序算法。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-55UE6BcT-1678963109988)(https://code-thinking.cdn.bcebos.com/gifs/977.有序数组的平方.gif)]双指针做法有点快排的感觉。无拓展题目。
2023-03-16 18:41:23
441
原创 代码随想录算法训练营第一天| 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
715
1
原创 二叉树相关算法(二)——遍历的应用
一、统计二叉树的最大宽度(按层遍历) 1、使用map 2、不使用map 二、序列化与反序列化 1、按层 2、先/中/后 三、打印二叉树(右中左) 四、求前驱与后继 中序 五、折纸(先序遍历“虚拟二叉树”) ...
2021-05-17 15:32:23
244
原创 异常——finally与return
一、情况的分类 1、从代码结构看: finally中进行return与不进行return ps: 如果代码中只有一处return,只能出现在finally中或者整个try catch finally框架之外。 2、是否在finally中改变变量值 二、案例说明 自定义描述术语: return生效:因为在try catch finally框架中,很有可能出现准备返回但未返回的情况(因为必须执行finally中的代码),不同位置上的return语句生效的情况不一样。 假设: 存在两处return,一处retur
2021-04-20 16:37:20
325
原创 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
127
原创 网络编程-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
438
原创 二叉树相关算法(一)——二叉树的遍历
一、先/中/后序遍历(递归) 递归方式会导致每个节点会经过三次,先序是在第一次经过节点时访问,中序是第二次经过节点时访问,后序是第三次经过节点时访问。 其中较为特殊的是叶子节点,左孩子和右孩子都为空,访问空树时什么都不做就返回。 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
276
原创 二叉树相关算法(三)——二叉树的递归套路
一、重要说明 1、递归是一种思想,将这种思想落实到二叉树这种数据结果的相关运用上,使我更加了解递归的作用。 2、以下所举的算法例子主要都是基于后续遍历的基础上实现的,即先遍历左子树,再遍历右子树,最后访问根节点,对于每一棵树都是如此。可以认为,递归方式可以从左/右子树上收集信息,从而在根节点处进行汇总。 3、递归分为在递去的过程中解决问题以及在归来的过程中解决问题。因为我想要的信息是从底层往上给(可以是叶子节点,也可以是空节点-》结束/返回条件),所以是在归来的过程中解决问题。 4、方法论:(可以指导对问.
2021-03-06 21:57:30
414
原创 Java后端所要掌握的前端知识——HTML篇
一、前端总体概述 1、Web三要素 浏览器(前端所学)、服务器(servlet)、HTTP协议。 HTTP和HTTPS协议: HTTPS加密传输(网址中不会携带一些私密信息)。 2、需要学的内容 (1)HTML XML:可扩展的标记语言,传输的一种数据格式(解析极其麻烦,故而改用json格式进行数据的传输) HTML:超文本标记语言 二、HTML概述 关注点: 常用的标签,属性,常用的样式(style) 1、元素 = 标签 + 内容(后期会需要获取指定的元素) 2、 ...
2020-08-05 10:57:17
2186
原创 Java中的线程(中)——同步与异步、锁机制、死锁
一、线程的同步、异步和手动锁 1、概念: 单线程与多线程 (1)单线程:one 每次只能做一件事情,要一件接着一件事情去做。 (2)多线程(并发):>=two 会发生多个线程抢占资源的现象,只有当抢占到资源之后,才会去执行。 在多线程的前提下,为了防止资源的冲突问题,提出了同步与异步的概念。 同步与异步 (1)同步:就像是一群人排队上公交车,一次只能上一个人,前面人上了之后后面的人才能接着上去(一件事情做完了之后才能去做另外一件事情) (2)异步:就像是一群人上卡车,可以从卡车的周围同时上去(很多事情
2020-06-24 16:46:57
1291
原创 Java中关于XML的创建与解析
一、什么是XML? 定义: 可扩展的标记语言,是独立于硬件和软件的一种信息传输工具,一般用于web应用程序中。 使用场景: 框架的配置文件(*.xml) 以前,前端与后端之间的数据交互使用的就是XML,由于其的不便利性,如今已改为使用JSON(传输工具)。 二、XML文件中的内容说明 注意: 1、第一行是XML的指令。 2、元素的名字可以自定义,根元素只能有一个,根元素中可以有多个子元素。 三、解析XML文件 目的:为了获取具体的name、job内容。 此时需要用到第三方jar包(dom4j.jar):
2020-06-23 00:42:44
519
原创 Java中的线程(上)——概述、实现、生命周期、常用的方法、优先级
一、线程概述 在现实生活中,万物可以同时进行多项活动,比如说,人,可以一边学习,一边听音乐,一边呼吸,一边进行血液循环。 在Java世界中,可以把每一项活动理解为一个线程,而在一个时间段内,同时进行多项活动的行为就可以理解为线程并发。Java语言提供了并发机制,程序员可以在程序中执行多个线程,每一个线程完成一个功能,并与其它线程并发执行,这种机制被称为多线程。 Java中的多线程在不同操作系统中的运行方式存在差异,在此说明多线程在Windows操作系统下的运行模式。 1、程序 指令+数据的byte序列,比如
2020-06-22 14:58:42
282
原创 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
584
原创 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
269
原创 Java中的IO流(上)——File文件类、字节输入输出流详解
IO流,即用来操作文件内容的技术。所以再讲IO流之前,要先认识一下File类。 一、File文件类 1、创建文件对象 2、对文件进行一系列操作 3、创建文件夹以及对文件夹的操作 二、IO流 1、IO流概况 2、 ...
2020-06-14 13:35:25
1220
原创 Java中的集合:List、Set、Map集合详解
一、关于集合的背景概况 1、为什么会产生集合? 集合可以类比到数组,都是储存多个数据的容器。 数组:长度不可变,在定义时就已经指定其长度(巴士) 集合:长度可变(火车,可以加车厢) 所以,在使用层面上来说,使用集合会比使用数组更加便利。 2、集合类概述 说明: Collection是List和Set的父接口 List和Set同样也是接口 List常用的实现类:ArrayList和LinkedList Set常用的实现类:HashSet和TreeSet 插入: Collection(集合名称) Collec
2020-06-11 20:01:13
537
原创 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
656
原创 Java中的内部类(4个)
匿名内部类 含义: 在类中定义一个没有名称只有类体的类。 使用情况: (1)抽象类 (2)接口 成员内部类 局部内部类 静态内部类(静态成员内部类)
2020-05-29 18:14:39
368
原创 Java面向对象的三大特性——继承、多态、封装
一、继承 关键字:extends 1、定义: 子类继承父类,就会继承父类所有非私有属性。 所以在设计父类与子类时, 将子类共有的特点(属性)和行为(方法)抽离出来定义为父类。 将子类特有的特点(属性)和行为(方法)定义在子类中,其他的则使用父类中的。 2、方法的重写: (1)重载(overload): 条件: 方法名相同,参数列表不相同,与返回值类型与访问修饰符无关。 (2)重写(override): 如果子类中有和父类相同的方法,那么就会调用子类的方法,父类的方法就会被覆盖。 条件: 方法名、参数列表以及
2020-05-28 22:54:29
355
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
242
原创 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
228
原创 抽象类与接口——知识层面及使用层面
(一)知识层面 1、抽象类 (1)定义: 用abstract修饰的类,表示一种抽象的类型。 为什么Java中要有这种抽象的类型呢? 举个例子,当你要写一个动物类时,所有动物的年龄等属性的定义方式是确定的,但是“吃”“叫”之类行为的实现方式是不相同的。这时可以将这些行为(方法)定性为抽象,子类继承抽象类之后,再去具体实现这些抽象方法。 一个类中只要存在抽象方法,那么这个类一定是抽象类。 (2)规范: 1、抽象类中既可以有抽象方法,也可以有非抽象方法。 抽象方法:只知道要做一件事情,但是不知道具体怎么做。没有方
2020-05-25 15:29:11
329
原创 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
1045
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人