自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Map(***)

对 Null key 和 Null value 的支持: HashMap 可以存储 null 的 key 和 value,但 null 作为键只能有一个,null 作为值可以有多个;底层数据结构: HashMap 在解决哈希冲突时有了较大的变化,当链表长度大于阈值(默认为 8)时,将链表转化为红黑树,以减少搜索时间。另外,Hashtable 基本被淘汰,不要在代码中使用它;线程是否安全:HashMap 是非线程安全的,Hashtable 是线程安全的,因为 Hashtable 内部的方法基本都经过。

2025-03-25 14:47:54 154

原创 java集合

我们只需要存放元素值时,就选择实现Collection 接口的集合,需要保证元素唯一时选择实现 Set 接口的集合比如 TreeSet 或 HashSet,不需要就选择实现 List 接口的比如 ArrayList 或 LinkedList。我们需要根据键值获取到元素值时就选用 Map 接口下的集合,需要排序时选择 TreeMap,不需要排序时就选择 HashMap,需要保证线程安全就选用 ConcurrentHashMap。根据集合的特点来选择合适的集合。

2025-03-20 12:41:16 180

原创 java代理模式

我们使用代理对象来代替对真实对象(real object)的访问,这样就可以在不修改原目标对象的前提下,提供额外的功能操作,扩展目标对象的功能。

2025-03-18 16:24:50 154

原创 java IO流

数据输入到计算机内存的过程即输入,反之输出到外部存储(比如数据库,文件,远程主机)的过程即输出。IO 流在 Java 中按照方向分为输入流和输出流,而根据数据的处理方式又分为字节流和字符流。因为对于文本文件,字节流直接操作字节,无法自动处理字符编码(如 UTF-8、GBK),需要手动处理编码和解码,容易导致乱码。InputStream/Reader: 所有的输入流的基类,前者是字节输入流,后者是字符输入流。OutputStream/Writer: 所有输出流的基类,前者是字节输出流,后者是字符输出流。

2025-03-14 11:23:36 270

原创 序列化和反序列化

序列化:将对象转换成二进制字节流反序列化:将在序列化过程中所生成的数据转换为原始对象。

2025-03-13 17:47:17 150

原创 java注解

1.编译期直接扫描:编译器在编译 Java 代码的时候扫描对应的注解并处理,比如某个方法使用@Override 注解,编译器在编译的时候就会检测当前的方法是否重写了父类对应的方法。这个过程是编译器基于自身对 Java 语法规则的理解和实现来完成的,并不涉及运行时反射。2.运行期通过反射处理:像框架中自带的注解(比如 Spring 框架的 @Value、@Component)都是通过反射来进行处理的。

2025-03-12 14:04:21 197

原创 反射java

反射机制是在运行状态中,对于任意一个类,都能够知道这个类中的所有属性和方法;对于任意一个对象,都能够调用它的任意一个属性和方法。就像是一个万能钥匙,想用哪个就拿哪个。

2025-03-10 13:16:14 73

原创 泛型java

消除强制类型转换:在没有泛型的情况下,从集合等数据结构中取出元素时往往需要进行强制类型转换,这种强制类型转换不安全,可能会报异常“ClassCastException ”提高安全:Java泛型提高类型安全的核心原理在于,它让编译器知道变量的类型限制,从而在编译时进行严格的类型检查。泛型方法——public static <E> void printArray(E[] inputArray)泛型类——public class Generic<T>泛型一般有三种使用方式:泛型类、泛型接口、泛型方法。

2025-03-10 13:15:12 242

原创 异常相关八股

Error:Error 属于程序无法处理的错误 ,我们没办法通过 catch 来进行捕获。例如 Java 虚拟机运行错误(Virtual MachineError)、虚拟机内存不够错误(OutOfMemoryError)等。这些异常发生时,Java 虚拟机(JVM)一般会选择线程终止。在 Java 中,所有的异常都有一个共同的祖先 Throwable 类。Exception :程序本身可以处理的异常,可以通过 catch 来进行捕获。

2025-03-05 14:29:07 125

原创 String

保存字符串的数组被 final 修饰且为私有(private)的,并且String 类没有提供/暴露修改这个字符串的方法。

2025-03-03 18:42:44 270

原创 Object类

类重写了 equals()方法:一般我们都重写 equals()方法来比较两个对象中的属性是否相等;若它们的属性相等,则返回 true。例如String 中的 equals 方法是被重写过的。类没有重写 equals()方法:通过equals()比较该类的两个对象时,等价于通过“==”比较两个对象,

2025-03-02 16:41:01 141

原创 面向对象基础

在 Java 里,当你没有为类定义任何构造方法时,Java 编译器会自动为该类提供一个默认的无参构造方法。面向对象编程:面向对象编程的设计思想是以对象为中心,通过对象之间的交互来完成程序的功能,具有灵活性和可扩展性。面向过程编程:面向过程把解决问题的过程拆成一个个方法,通过一个个方法的执行解决问题。自动执行:在生成类的对象时,构造方法会自动执行,无需显式调用。对象引用存放对象实体的地址,对象实体存储对象具体的数据。对象的相等一般比较的是内存中存放的内容是否相等。一个对象引用可以指向 0 个或 1 个对象;

2025-02-27 14:09:39 138

原创 java方法篇

在类的非静态成员不存在的时候静态方法就已经存在了,此时调用在内存中还不存在的非静态成员,属于非法操作。而非静态成员属于实例对象,只有在对象实例化之后才存在,需要通过类的。静态方法是属于类的,在类加载的时候就会分配内存,可以通过。(先加载类,再加载实例对象)

2025-02-22 17:24:00 169

原创 java八股文——变量

从技术上来讲,局部变量一般来说总量大,生命周期短,JVM进行初始话开销较大。注意:不存在局部静态变量概念。

2025-02-21 17:16:15 234

原创 基本数据类型

Java 中有 8 种基本数据类型,分别为:2.

2025-02-18 15:58:41 117

原创 java基本语法

文档注释:以 /** 开头,以 */ 结尾。多行注释:以 /* 开头,以 */ 结尾。总结:单行注释和文档注释比较常用。单行注释:// 我是注释。

2025-02-15 20:13:21 259

原创 java基础知识

Java SE (Standard Edition)是 Java 的基础版本,Java EE (Enterprise Edition)是 Java 的高级版本。3. 平台无关性:即所谓的“一次编写,到处运行” java 程序编译后生成的是字节码文件(.class),这些字节码文件可以在任何安装了 Java 虚拟机(JVM)的平台上运行。JVM使得Java程序具备跨平台性。1.简单易学:Java 的语法类似于 C 和 C++,但去掉了一些复杂容易引起错误的内容,例如指针,从而降低了学习和使用的难度。

2025-02-13 12:51:47 287

原创 leetcode200.岛屿数量

思路:遍历整个网格 grid: 遇到一个 '1' 时,就表示发现了一个新岛屿,nums_island 增加 1。同时通过广度优先搜索淹没整个岛屿(即将与当前 '1' 相连的所有 '1' 变为 '0'),以免重复计数。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。(水)组成的的二维网格,请你计算网格中岛屿的数量。此外,你可以假设该网格的四条边均被水包围。

2025-02-11 15:15:50 141

原创 leetcode208.实现Trie(前缀树)

是一种树形数据结构,用于高效地存储和检索字符串数据集中的键。这一数据结构有相当多的应用情景,例如自动补全和拼写检查。// 返回 False。// 返回 True。// 返回 True。// 返回 True。(发音类似 "try")或者说。思路:就是哈希表的简单应用。

2025-02-09 14:04:35 131

原创 leetcode207.课程表

思路:存储每个课程的前驱和后继课程,如果一个课程入度为0,则表示该课程能够成功修读,则修改其后继课程的入度(即该后继课程可以少考虑一门先修) 采用广度优先顺序不断修改,如果成功修读课程数== numCourses则返回true。总共有 2 门课程。学习课程 1 之前,你需要先完成​课程 0;并且学习课程 0 之前,你还应先完成课程 1。总共有 2 门课程。学习课程 1 之前,你需要完成课程 0。在选修某些课程之前需要一些先修课程。请你判断是否可能完成所有课程的学习?,表示如果要学习课程。

2025-02-08 09:45:46 220

原创 leetcode994.腐烂的橘子

/ sp.一开始就是所有橘子都被腐烂状态,则直接返回0;最后仍剩余橘子不会被腐烂,返回-1。左下角的橘子(第 2 行, 第 0 列)永远不会腐烂,因为腐烂只会发生在 4 个方向上。直到单元格中没有新鲜橘子为止所必须经过的最小分钟数。// 解读一下该题的要求:返回所有橘子都被腐烂所需要的分钟数。因为 0 分钟时已经没有新鲜橘子了,所以答案就是 0。// 经典广度优先遍历问题。的新鲜橘子都会腐烂。思路:详细注解见代码。

2025-02-07 12:38:36 413

原创 leetcode1143.最长公共子序列·

是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。最长公共子序列是 "ace" ,它的长度为 3。最长公共子序列是 "abc" ,它的长度为 3。两个字符串没有公共子序列,返回 0。是这两个字符串所共同拥有的子序列。,返回这两个字符串的最长。

2025-02-07 09:54:21 269

原创 leetcode5.最长回文字串

2)不是i==j造成,则要看[i+1][j-1]字串是不是回文字串,是,则最长回文字串长度为j-i+1;1)i==j造成的相等,即就是一个元素"a" "b"这种,最长回文字串长度为1;dp[i][j]表示考虑区间范围[i,j]最长回文字串长度。1. i下标元素和j下标元素不等,最长回文字串长度为0;2. i下标元素和j下标元素相等————"aba" 同样是符合题意的答案。中最长的 回文子串。

2025-02-06 14:50:21 215

原创 leetcode64.最小路径和

请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。因为路径 1→3→1→1→1 的总和最小。每次只能向下或者向右移动一步。给定一个包含非负整数的。

2025-02-05 22:15:19 175

原创 leetcode62.不同路径

dp[i] [j] 表示到第 i 行 j 列格子有多少种走法,注意初始化第一行和第一列都是1种走法。递归公式思路为 —— 一个格子要么从左边来,要么从右边来,因此一个格子走法等于二者之和。网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。从左上角开始,总共有 3 条路径可以到达右下角。1. 向右 -> 向下 -> 向下。2. 向下 -> 向下 -> 向右。3. 向下 -> 向右 -> 向下。

2025-02-05 10:54:50 459

原创 leetcode31.下一个排列

将后面大数与前面小数进行交换,交换尽可能发生在低位,因此从后往前遍历;确定“小数”,即升序对的前一个数;确定“大数”,即从后往前找第一个比小数大的数字;交换后将大数后面变为升序 因为升序是最小的 满足题目下一个排列增幅尽可能小。这道题就别想着用回溯全排列的思路了,空间复杂度不满足。如果不存在下一个更大的排列,那么这个数组必须重排为字典序最小的排列(即,其元素按升序排列)。是指其整数的下一个字典序更大的排列。更正式地,如果数组的所有排列根据其字典顺序从小到大排列在一个容器中,那么数组的。

2025-01-27 14:46:00 141

原创 leetcode75.颜色分类

对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。分别表示红色、白色和蓝色。必须在不使用库内置的 sort 函数的情况下解决这个问题。给定一个包含红色、白色和蓝色、共。统计0、1、2数量,然后给数组赋值。

2025-01-22 18:39:30 208

原创 leetcode136.寻找重复数

,可知至少存在一个重复的整数。你可以设计一个线性级时间复杂度。你设计的解决方案必须。

2025-01-22 17:02:37 372

原创 leetcode169.多数元素

假设candidate为主要势力(存储多数元素),count 为candidate战斗力(多数元素和其他元素对抗后剩余个数);如果和candidate不是一伙的,则战斗力count--。由于非maj的人数比maj的人数少并且还会自相残杀,非maj们无法吧maj们全拉下来。因此最后的candidate就是多数元素。尝试设计时间复杂度为 O(n)、空间复杂度为 O(1) 的算法解决此问题。你可以假设数组是非空的,并且给定的数组总是存在多数元素。,返回其中的多数元素。碎碎念:这竟然是简单题?

2025-01-22 16:15:38 380

原创 leetcode136.只出现一次的数字

除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。,也采用了计数排序思想。

2025-01-21 14:29:59 397

原创 leetcode215.数组中的第K个最大元素

采用计数排序思想,创建一个涵盖所有数字可能范围的数组temp,下标i即数字,temp[i]即i出现次数,从后遍历temp,遇到temp[i]=0跳过,遇到temp[i]!=0则k--,直到k===0则找到第k大元素;注意这里nums[i]数字对应到temp是nums[i]+10000,因为如果直接对应,不处理,出现负数无法直接对应到temp下标。请注意,你需要找的是数组排序后的第。你必须设计并实现时间复杂度为。个最大的元素,而不是第。

2025-01-21 13:43:00 801

原创 leetcode347.前k个高频元素

思路:使用map统计各个数字出现频率,用大小为k最小堆留下高频k个数字;时间复杂度满足进阶要求O(nlogk)<O(nlogn);注意堆始终堆存放的是元素值,但是要根据元素值出现频率排序,因此要自定义堆排序方法。标签:哈希表 优先级队列。,请你返回其中出现频率前。你所设计算法的时间复杂度。

2025-01-20 17:20:25 305

原创 leetcode763.划分字母区间

思路:遍历字符串,得到每个字母第一次和最后一次出现的下标位置。map<字母,[字母第一次出现位置,字母最后一次出现位置]>为保证题目“同一字母最多出现在一个片段中”,合并所有字母出现区间,即可得到最后的片段数。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。注意,划分结果需要满足:将所有划分结果按顺序连接,得到的字符串仍然是。返回一个表示每个字符串片段的长度的列表。标签:哈希表合并区间。

2025-01-20 13:58:10 268

原创 leetcode416.分割等和子集

如果数组和为奇数,则一定无法分割;如果为偶数,则转换为背包是否能装满问题,dp[j]表示容量j是否能凑成。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。数组可以分割成[1,5,5]和[11]。数组不能分割成两个元素和相等的子集。

2025-01-19 20:03:10 290

原创 leetcode152.乘积最大子数组

请你找出数组中乘积最大的非空连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。测试用例的答案是一个。//dp[i]表示以nums[i]结尾的子数组的最大乘积。结果不能为2,因为[-2,-1]不是子数组。子数组[2,3]有最大乘积6。//注意这道题涉及到符号问题。

2025-01-19 15:15:37 258

原创 leetcode300.最长递增子序列

是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。思路:dp[i]表示以nums[i]结尾严格递增子序列最长长度,时间复杂度为O(最长递增子序列是[2,3,7,101],因此长度为4。,找到其中最长严格递增子序列的长度。

2025-01-18 17:44:39 523

原创 leetcode139.单词拆分

思路:这道题可以尝试用二维矩阵走一遍过程就理解了,dp[j]表示j及之前的部分能否凑成,dp[j]为true条件为i-j能凑成,且dp[i]为true。返回true因为"applepenapple"可以由"apple""pen""apple"拼接成。返回true因为"leetcode"可以由"leet"和"code"拼接成。不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。如果可以利用字典中出现的一个或多个单词拼接出。注意,你可以重复使用字典中的单词。

2025-01-18 14:44:28 426

原创 leetcode279.完全平方数

是一个整数,其值等于另一个整数的平方;换句话说,其值等于一个整数自乘的积。几乎一毛一样,只不过这里物品重量要自己计算。的完全平方数的最少数量。

2025-01-16 19:17:22 414

原创 leetcode322.零钱兑换

思路:该题属于求装满背包所用最少物品件数,dp[j]含义为填满容量j最少物品件数,最后返回dp[amount]即可;初始化dp[0]=0,剩下为-1,表示相应背包容量无法由给定物品凑成;计算并返回可以凑成总金额所需的。如果没有任何一种硬币组合能组成总金额,返回。,表示不同面额的硬币;你可以认为每种硬币的数量是无限的。

2025-01-16 18:52:50 200

原创 leetcode198.打家劫舍

一个是确定动态数组含义,这里dp[i] 表示考虑前i所房子能偷窃到的最大金额;一个是确定递推公式,这里递归公式思路为:第i所房子可以偷(nums[i]+dp[i-2])或者不偷(dp[i-1])偷窃1号房屋 (金额 = 2), 偷窃3号房屋 (金额=9),接着偷窃5号房屋 (金额=1)。偷窃到的最高金额 = 2 + 9 + 1 = 12。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,偷窃1号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。

2025-01-16 15:15:09 499

空空如也

空空如也

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

TA关注的人

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