- 博客(51)
- 收藏
- 关注
原创 代码随想录-暑假算法第七天(贪心算法篇)(记得要回看,还有一些不怎么理解)
贪心的本质是选择每一阶段的局部最优,从而达到全局最优。这么说有点抽象,来举一个例子:例如,有一堆钞票,你可以拿走十张,如果想达到最大的金额,你要怎么拿?指定每次拿最大的,最终结果就是拿走最大数额的钱。每次拿最大的就是局部最优,最后拿走最大数额的钱就是推出全局最优。再举一个例子如果是 有一堆盒子,你有一个背包体积为n,如何把背包尽可能装满,如果还每次选最大的盒子,就不行了。这时候就需要动态规划。动态规划的问题在下一个系列会详细讲解。本篇给出了什么是贪心以及大家关心的贪心算法固定套路。
2024-08-21 14:25:49
1109
2
原创 代码随想录-暑假算法第六天(回溯篇)
回溯法也可以叫做回溯搜索法,它是一种搜索的方式。在二叉树系列中,我们已经不止一次,提到了回溯,例如二叉树:以为使用了递归,其实还隐藏着回溯 (opens new window)。回溯是递归的副产品,只要有递归就会有回溯。所以以下讲解中,回溯函数也就是递归函数,指的都是一个函数。本篇我们讲解了,什么是回溯算法,知道了回溯和递归是相辅相成的。接着提到了回溯法的效率,回溯法其实就是暴力查找,并不是什么高效的算法。然后列出了回溯法可以解决几类问题,可以看出每一类问题都不简单。
2024-08-17 12:54:45
669
原创 代码随想录-暑假算法第五天(二叉树篇)
你可能需要改变树的根节点,所以结果应当返回修剪好的二叉搜索树的新的根节点。给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。给你一棵所有节点为非负值的二叉搜索树,请你计算树中任意两节点的差的绝对值的最小值。给定二叉树 [1,2,2,3,3,null,null,4,4]
2024-08-15 11:52:50
1561
1
原创 代码随想录-暑假算法第四天(栈和队列篇)
使用栈实现队列的下列操作:push(x) – 将一个元素放入队列的尾部。pop() – 从队列首部移除元素。peek() – 返回队列首部的元素。empty() – 返回队列是否为空。
2024-08-09 13:40:29
886
原创 代码随想录-暑假算法第三天(哈希表篇)
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。示例 1: 输入: s = “anagram”, t = “nagaram” 输出: true示例 2: 输入: s = “rat”, t = “car” 输出: false你可以假设字符串只包含小写字母。
2024-08-07 13:46:08
353
原创 代码随想录-暑假算法第二天(链表篇)
接下来说一说链表的定义。链表节点的定义,很多同学在面试的时候都写不好。这是因为平时在刷leetcode的时候,链表的节点都默认定义好了,直接用就行了,所以同学们都没有注意到链表的节点是如何定义的。而在面试的时候,一旦要自己手写链表,就写的错漏百出。// 单链表int val;// 节点上存储的元素// 指向下一个节点的指针ListNode(int x) : val(x), next(NULL) {} // 节点的构造函数123456。
2024-07-28 14:03:33
397
原创 代码随想录-暑假算法第一天(数组篇)
力扣题目链接(opens new window)给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。示例 1:123示例 2:123提示:总结属于基础题目,大家一看就懂了,主要是边界问题大家可以使用左闭右闭区间来编写二分查找代码,left
2024-07-12 22:33:42
755
原创 java里面反射和动态代理的基础知识
动态代理是Java提供的一种机制,通过该机制可以在运行时为任意实现了接口的类动态生成一个代理类,并在这个代理类中实现一些额外的功能,如日志记录、事务控制等。
2024-05-26 18:48:28
452
2
原创 网络编程的基础知识(适合新手)
在Java中,网络编程是指使用Java语言进行网络通信的编程技术。这种技术使得位于不同地理位置的计算机能够通过网络进行通信,实现资源共享和信息传递。一、定义Java网络编程是Java语言在网络通信方面的应用,它利用Java提供的网络类库和API,通过编写网络程序实现不同计算机之间的通信。Java网络编程涉及许多概念和技术,如IP地址、端口号、套接字(Socket)和通信协议等。二、用处三、使用方法。
2024-05-26 10:52:10
814
原创 Java多线程基础知识(超详细)
在Java中,你可以通过实现接口的某个类(通常是)来自定义线程池。类提供了丰富的配置选项,允许你控制线程池的行为。以下是一个自定义线程池的示例,使用// 创建一个自定义的线程池 public static ExecutorService createThreadPool() {// 核心线程数 int corePoolSize = 5;// 最大线程数 int maxPoolSize = 10;// 线程池维护线程所允许的空闲时间 long keepAliveTime = 60L;
2024-05-24 15:55:12
854
原创 Java里面的IO流基础知识
第一个单词表示他的作用第二个单词表达他的继承结构在Java中,是 Java 输入/输出 (IO) 库中的一个类,用于从文件中读取字节数据。它是的一个子类,专门用于从文件中读取数据。
2024-05-16 09:35:17
596
2
原创 Java里面的File
File对象表示路径这个路径可以是存在的,也可以是不存在的在Java中,File是一个类,它位于java.io包中,用于文件和文件目录路径名的抽象表示形式。File类本身并不涉及文件的读取和写入,它主要用于操作文件或目录的路径名,例如创建、删除、检查文件或目录是否存在等。
2024-05-05 11:10:47
1113
4
原创 Java里面的异常
父类: Exception异常分为两类:编译时异常:没有继承RuntimeException的异常,直接继承于Exception,编译阶段就会错误提示(用来提示程序员)运行时异常:RuntimeException本身和子类,编译阶段没有错误提示,运行时出现的可以写多个catch,如果存在父子关系,父要写在最后面在Java中,异常(Exception)是一种用于处理程序运行期间出现的错误或异常情况的机制。当程序发生无法预料的情况,如文件未找到、网络中断等,Java会抛出一个异常。
2024-05-04 10:56:05
560
1
原创 Java里面的方法引用
把已经存在的方法拿过来用,当做函数式接口中抽象方法的方法体在Java中,方法引用(Method References)是Java 8引入的一个新特性,它允许你直接引用现有Java类或对象的方法或构造器。这可以被视为Lambda表达式的一种简化表示法,在不需要传递任何参数,或者只需要从某个对象的实例调用方法时特别有用。
2024-05-03 11:33:41
788
2
原创 Java里面的Stream流
在Java中,Stream(流)是Java 8引入的一个新特性,它允许我们以声明性方式处理数据集合(如List、Set等)。Stream API提供了一种高效且易于使用的方式来处理数据,而无需编写复杂的迭代逻辑。
2024-05-02 11:47:47
297
1
原创 Java的双列集合的基础知识
Java中的Map接口是双列集合的顶层接口,它定义了一系列用于操作键值对的方法。常见的Map实现类包括HashMap、LinkedHashMap、TreeMap等,它们各自具有不同的特性和适用场景。例如,HashMap基于哈希表实现,提供了快速的插入、删除和查找操作;TreeMap基于红黑树实现,可以对键进行排序;而LinkedHashMap则保持了键值对的插入顺序。总结来说,双列集合在Java中是一种强大的数据结构,通过键值对的映射关系实现了高效的数据存储和检索功能。
2024-05-01 19:48:44
2444
4
原创 Java集合进阶
在Java中,集合体系结构是一个用于存储和处理对象的框架,它主要由几个核心接口和类组成。Java集合框架(Java Collections Framework)是Java编程语言的一部分,它提供了一组接口和类来表示和操作集合,也就是一组对象。:如CollectionListSetQueueDequeMap等。这些接口定义了一些通用的操作,比如添加、删除、查找元素等。:如ArrayListLinkedListHashSetTreeMapHashMap等。这些类实现了上述接口,并提供了具体的实现细节。
2024-04-26 20:47:16
1066
原创 Java的Arrays的基础知识
在Java中,Arrays是一个用于操作数组的工具类,它提供了很多静态方法来处理数组,如排序、搜索、比较等。这个类在java.util包中,因此在使用之前需要导入这个包。
2024-04-23 17:13:30
1324
原创 常见算法(二分,分块查找,插入,快速排序)
mid只是数组元素的下标,要比较两个数字,是用arr[mid]和number比较,而不是mid和number比较。
2024-04-21 14:20:11
614
原创 Java常见API(二)
在Java中,BigInteger是一个用于任意精度的有符号整数的类。当你需要表示和操作超过long类型范围的整数时,BigInteger就非常有用。它提供了各种算术运算,如加、减、乘、除、模运算等,以及位运算和比较操作。
2024-04-18 19:41:44
1056
1
原创 Java正则表达式基本练习
在Java中,正则表达式(Regular Expression,简称regex或regexp)是一种强大的文本处理工具,它使用一种特定格式的字符串来描述、匹配和查找文本模式。正则表达式在Java中广泛应用于各种文本处理任务,如验证用户输入、搜索和替换文本中的特定模式等。
2024-04-14 22:56:15
767
1
原创 C语言实现宾馆客房管理系统(C语言程序设计基础)
宾馆客房管理系统的设计目的是提供一个高效、便捷的管理工具,用于处理宾馆客房的预定、入住、退房及账单结算等日常操作。通过该系统,宾馆工作人员能够迅速获取客房的实时状态,优化客房资源的分配,提升客户体验,同时简化管理流程,减少人为错误,提高工作效率。
2024-04-13 19:57:17
2032
原创 Java常见API
在Java中,Math是一个包含了许多数学函数和常量的类,它属于java.lang包,因此在使用时不需要显式地导入。Math类提供了许多静态方法来进行数学运算,比如三角函数、对数函数、指数函数等。
2024-04-12 22:07:22
1068
4
原创 Java面向对象进阶基础知识
不可变变量:当变量被final修饰时,它的值在初始化后就不能再被修改。这样的变量通常被称为常量,并且其命名习惯是全大写字母。不可继承类:当类被final修饰时,它不能被其他类继承。这意味着其他类不能扩展或复用这个被final修饰的类的功能。不可覆盖方法:当方法被final修饰时,它不能被子类重写(覆盖)。这保证了父类中的方法行为在子类中不会被改变,从而增强了程序的稳定性和安全性。
2024-04-06 11:41:20
2014
70
原创 Java学生管理系统(附完整代码)两个版本
类似,这是一个简单的Java Bean,包含了用户的用户名、密码、身份证号和手机号码,以及对应的构造方法和getter/setter方法。这段代码是一个简单的Java学生管理系统,包含添加、删除、修改和查询学生信息的功能。这个类是学生管理系统的核心,提供了一个文本界面供用户与系统交互,并实现了添加、删除、修改和查询学生的功能。 1,键盘录入用户名,判断当前用户名是否存在,如不存在,直接结束方法,并提示:未注册。这个类提供了用户登录注册系统的入口,实现了登录、注册、忘记密码和退出系统的功能。
2024-03-31 17:15:17
2431
67
原创 Java集合的基础知识
在Java中,每种基本数据类型都有一个对应的包装类。这些包装类属于java.lang包,它们的作用是将基本数据类型转换为对象,这样可以使用对象的方法和属性。包装类提供了一些有用的方法,如将字符串转换为相应的基本类型值,或者将基本类型值转换为字符串,以及其他一些实用的静态方法。是一个泛型类,这意味着你可以指定列表可以包含的元素类型,例如。这样做有助于提供编译时类型安全,并减少运行时类型错误的可能性。来解析字符串为布尔值。此外,包装类还实现了比较对象等功能。方法来将字符串转换为整数,Boolean类提供了。
2024-03-31 12:22:05
2770
19
原创 Java的字符串的基础知识(必看)
运行结果:这几行代码展示了Java中对字符串(String)对象的操作。首先,代码创建了一个名为name的字符串变量,并将其初始化为"123",即。接下来,代码将字符串变量name的值修改为"456",即。在Java中,字符串是不可变的(immutable),这意味着一旦创建了一个字符串对象,就无法修改它的值。但是,当我们修改字符串变量时,实际上是创建了一个新的字符串对象,并将变量指向新的对象。最后,代码使用方法将字符串变量name的值打印到控制台。由于name。
2024-03-28 19:00:52
1993
12
原创 Java中的String字符串练习
/这里的test的值为 ASCII码值 不是真正的"数字" //我要拿的是里面的之前存储的数字1,2 来计算 而不是拿数字对应的码值来计 int test = (int)c;修改字符串中的字符:字符串是不可变的,即不能直接修改字符串中的某个字符。每个字符都被存储在数组的一个元素中,顺序与字符串中的顺序相同。方法是将字符串转换为字符数组的一种方便的方式,它可以在需要处理单个字符的情况下提供更灵活的操作。这段代码使用一个无限循环,将金额的每一位数字转换为对应的大写形式,并将其拼接到。
2024-03-26 21:26:44
4215
27
原创 Java面向对象(综合案例)有点难度 附代码解释
它使用一个循环遍历数组中的每个元素,并通过调用学生对象的getter方法获取学号、姓名和年龄,并输出到控制台。如果数组已满,它会创建一个新的数组(方法用于创建一个新的数组,并将原数组的内容复制到新数组中。类有两个构造方法,一个是默认构造方法,另一个是带有参数的构造方法,用于初始化角色的属性。,然后判断被攻击角色的血量是否为0,如果为0,则输出击败信息并结束游戏。),将原数组的元素复制到新数组中,并将新的学生对象添加到新数组的末尾。,同样判断被攻击角色的血量是否为0,如果为0,则输出击败信息并结束游戏。
2024-03-25 07:00:00
1788
47
原创 Java中的this关键字的内存图
要理解this关键字的内存图,我们需要了解Java中对象的内存分配方式。当创建一个对象时,Java会在堆内存中分配一块内存空间来存储对象的实例变量。这是一个简化的内存图,实际上Java的内存管理更为复杂,涉及到垃圾回收、对象分配等方面的细节。当我们在实例方法或构造方法中使用this关键字时,它实际上是一个指向当前对象的引用。这个引用存储在栈内存中,指向堆内存中的对象。它可以在实例方法和构造方法中使用,表示对当前对象的引用。在栈内存中,我们有一个指向堆内存中对象的引用。,我们可以访问并打印对象的实例变量。
2024-03-23 22:01:00
617
12
原创 Java中的类与对象
需要注意的是,构造方法的主要目的是在创建对象时进行初始化操作,因此应该避免在构造方法中执行过多的逻辑或复杂的计算。需要注意的是,Java中的基本数据类型包括boolean、byte、short、int、long、float、double和char,而其他所有的类型都属于引用数据类型,包括类、接口、数组和枚举等。需要注意的是,成员变量和局部变量可以同名,但在同一作用域内,局部变量会覆盖同名的成员变量。默认值:成员变量会被赋予默认值,例如,整数类型的成员变量默认值为0,布尔类型的成员变量默认值为false。
2024-03-22 02:30:00
5658
60
原创 在java中当main方法执行完,堆内存会自己释放内存吗?(附解释)
Java中的垃圾回收器使用了不同的算法来检测和回收不再使用的对象,其中最常见的是基于可达性分析的垃圾回收算法。在Java 8及以前的版本中,方法区的内存空间是有限的,并且由JVM进行管理。在Java 8之后,方法区被替换为元空间,它使用本机内存而不是虚拟机内存,并且具有更高的可扩展性。在Java中,堆内存中的对象由Java虚拟机(JVM)的垃圾回收器自动进行内存管理和释放。总结起来,Java中的堆内存中的对象由垃圾回收器自动管理和释放,而方法区的内存也由JVM自动管理和释放。
2024-03-20 22:54:11
833
15
原创 Java基础经典10道题
1.2 用户录入他的号码,方法: 动态创建一个长度为7(6红1蓝)的数组,使用Scanner对象,将用户录入的数字赋值到数组里面,(当随机产生的数字要在范围内(红:1-33 蓝:1-16),并判断当前的数字在数组中是否存在,如果不存在,就将当前数字赋值到数组里)使用while(true)使代码的健壮性更好,当用户输入的数字正确时,break,跳出循环。交换两个数字,数组中的元素,没有改变,改变的只是数组的元素的位置,但是数组的元素还是原来的那几个,1. 根据需求,解决问题,分为3个步骤,
2024-03-18 21:41:45
1958
27
原创 java是不是没有指针呢?
因此,尽管Java没有像C语言一样直接的指针操作,但通过引用和JVM的内部机制,Java仍然可以实现对对象的间接访问和管理。Java中的引用提供了一种间接访问对象的方式,通过引用可以访问和操作对象的属性和方法。引用的使用在很大程度上简化了内存管理和安全性问题,因为Java的垃圾回收器会自动处理对象的内存释放。Java中的引用可以看作是一种类似指针的概念,它可以指向对象,但不能进行指针运算或直接访问内存地址。Java的设计初衷是为了提供更高的安全性和可靠性,因此它采用了一些机制来避免常见的指针错误。
2024-03-13 22:05:48
713
4
原创 方法的基本内存管理
在Java中,内存分配是由Java虚拟机(JVM)负责的。JVM将可用的系统内存划分为不同的区域,用于存储不同类型的数据和执行不同的操作。主要的内存区域包括:方法区(Method Area):用于存储类的结构信息,如类的字段、方法、构造函数等。在JDK 8及之前的版本中,方法区被实现为永久代(Permanent Generation),而在JDK 8及之后的版本中,方法区被实现为元空间(Metaspace)。堆(Heap):用于存储对象实例和数组。Java中所有通过new关键字创建的对象都存储在堆中。
2024-03-13 21:57:05
1227
1
原创 java中的数组作为参数进行传参
在Java中,当你将一个数组作为参数传递给方法时,不会创建一个新的数组或复制数组的元素。实际上,数组的引用会被传递给方法,方法内部可以通过这个引用来访问和操作原始数组。需要注意的是,如果在方法内部对数组对象进行修改(例如修改数组元素的值),这些修改会影响到原始数组,因为它们引用的是同一个数组对象。引用,都是对同一个数组对象进行的。没有额外的内存分配或复制操作。引用的是同一个数组对象,它们指向相同的内存空间。所以,对于数组元素的访问和操作,无论是通过。在你的代码中,当你调用。数组的引用被传递给了。
2024-03-11 14:28:29
1228
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人