3005-最大频率元素计数
3005-最大频率元素计数最大频率元素计数 题目描述 给你一个由 正整数 组成的数组 nums 。 返回数组 nums 中所有具有 最大 频率的元素的 总频率 。 元素的 频率 是指该元素在数组中出现的次数。 示例 1: 输入:nums = [1,2,2,3,1,4]输出:4解释:元素 1 和 2 的频率为 2 ,是数组中的最大频率。因此具有最大频率的元素在数组中的数量是 4 。 示例 2: 输入:nums = [1,2,3,4,5]输出:5解释:数组中的所有元素的频率都为 1 ,是最大频率。因此具有最大频率的元素在数组中的数量是 5 。 提示: 1 <= nums.length <= 100 1 <= nums[i] <= 100 解题思路 太简单了 1234567891011121314151617181920212223import java.util.Arrays;import java.util.List;import java.util.stream.Collectors;public class LeetCode3...
3408-设计任务管理器
3408-设计任务管理器题目描述 一个任务管理器系统可以让用户管理他们的任务,每个任务有一个优先级。这个系统需要高效地处理添加、修改、执行和删除任务的操作。 请你设计一个 TaskManager 类: TaskManager(vector<vector<int>>& tasks) 初始化任务管理器,初始化的数组格式为 [userId, taskId, priority] ,表示给 userId 添加一个优先级为 priority 的任务 taskId 。 void add(int userId, int taskId, int priority) 表示给用户 userId 添加一个优先级为 priority 的任务 taskId ,输入 保证 taskId 不在系统中。 void edit(int taskId, int newPriority) 更新已经存在的任务 taskId 的优先级为 newPriority 。输入 保证 taskId 存在于系统中。 void rmv(int taskId) 从系统中删除任务 taskId 。输入 保证 ...
2349-设计数字容器系统
2349-设计数字容器系统题目描述 设计一个数字容器系统,可以实现以下功能: 在系统中给定下标处 插入 或者 替换 一个数字。 返回 系统中给定数字的最小下标。 请你实现一个 NumberContainers 类: NumberContainers() 初始化数字容器系统。 void change(int index, int number) 在下标 index 处填入 number 。如果该下标 index 处已经有数字了,那么用 number 替换该数字。 int find(int number) 返回给定数字 number 在系统中的最小下标。如果系统中没有 number ,那么返回 -1 。 示例: 输入:["NumberContainers", "find", "change", "change", "change", "change", "find", "change", "find&quo...
2197-替换数组中的非互质数
2197-替换数组中的非互质数题目描述 给你一个整数数组 nums 。请你对数组执行下述操作: 从 nums 中找出 任意 两个 相邻 的 非互质 数。 如果不存在这样的数,终止 这一过程。 否则,删除这两个数,并 替换 为它们的 最小公倍数(Least Common Multiple,LCM)。 只要还能找出两个相邻的非互质数就继续 重复 这一过程。 返回修改后得到的 最终 数组。可以证明的是,以 任意 顺序替换相邻的非互质数都可以得到相同的结果。 生成的测试用例可以保证最终数组中的值 小于或者等于 108 。 两个数字 x 和 y 满足 非互质数 的条件是:GCD(x, y) > 1 ,其中 GCD(x, y) 是 x 和 y 的 最大公约数 。 示例 1 : 输入:nums = [6,4,3,2,7,6,2]输出:[12,7,6]解释: (6, 4) 是一组非互质数,且 LCM(6, 4) = 12 。得到 nums = [12,3,2,7,6,2] 。 (12, 3) 是一组非互质数,且 LCM(12, 3) = 12 。得到 nums = [12,2,7...
Java并发编程面试题
Java并发编程面试题一、基础1、并行跟并发的区别 并行:同一时刻,多个线程都在执行,这就要求有多个CPU分别执行多个线程。 并发:在同一时刻,只有一个线程执行,但在一个时间段内,两个线程都执行了。其实现依赖于CPU切换线程,因为切换时间很短,所以基本对于用户是无感知的。 2、什么是进程和线程 进程:程序运行起来后在内存中执行,并附带有运行所需的资源,是系统进行资源分配的基本单位。 线程:CPU是被分配到线程的,所以线程是CPU分配的基本单位。在Java中,当我们启动一个main函数就相当于启动了一个JVM进程,而main函数的线程就是主线程。一个进程中有多个线程,多个线程共用进程的堆和方法区,但每个线程都有自己的程序计数器和栈。 3、线程有几种创建方式 继承Thread类:重写run方法,调用start()方法启动线程。 缺点:单继承,继承了Thread就不能继承别的类了 1234567891011public static class MyThread extends Thread { @Override public void run...
1935-可以输入的最大单词数
1935-可以输入的最大单词数题目描述 键盘出现了一些故障,有些字母键无法正常工作。而键盘上所有其他键都能够正常工作。 给你一个由若干单词组成的字符串 text ,单词间由单个空格组成(不含前导和尾随空格);另有一个字符串 brokenLetters ,由所有已损坏的不同字母键组成,返回你可以使用此键盘完全输入的 text 中单词的数目。 示例 1: 输入:text = "hello world", brokenLetters = "ad"输出:1解释:无法输入 "world" ,因为字母键 'd' 已损坏。 示例 2: 输入:text = "leet code", brokenLetters = "lt"输出:1解释:无法输入 "leet" ,因为字母键 'l' 和 't' 已损坏。 示例 3: 输入:text = "leet code", brokenLetters = "...
Java中锁机制
Java 锁机制详细解析1. 锁的基本概念与分类1.1 为什么需要锁在多线程环境中,当多个线程同时访问共享资源时,可能会导致数据不一致或程序行为异常。锁机制通过强制互斥访问来确保线程安全,保证在同一时刻只有一个线程可以访问共享资源。 1.2 锁的分类Java中的锁可以分为以下几类: 内置锁(synchronized):Java语言内置的同步机制 显式锁(Lock接口):java.util.concurrent.locks包提供的锁 读写锁:允许多个读操作同时进行,但写操作独占 乐观锁与悲观锁:不同的并发控制策略 2. synchronized 内置锁2.1 实现原理synchronized是Java关键字,它基于监视器锁(Monitor)实现。每个Java对象都有一个关联的监视器锁,当线程进入synchronized代码块时,会自动获取这个锁,退出时自动释放。 底层实现: 在JVM字节码层面,synchronized通过monitorenter和monitorexit指令实现 对象头中的Mark Word字段用于存储锁状态信息 锁的升级过程:无锁 → 偏向锁 → 轻量级锁 ...
Java多线程梳理
Java多线程全面解析1. 多线程基础概念1.1 进程与线程进程是操作系统进行资源分配和调度的基本单位,每个进程都有独立的内存空间和系统资源。一个进程崩溃不会影响其他进程的运行,提供了良好的隔离性。 线程是进程中的一个执行单元,是CPU调度和执行的最小单位。同一进程内的所有线程共享进程的内存空间和系统资源,这使得线程间的通信更加高效,但也带来了数据同步的挑战。 1.2 为什么需要多线程 提高程序响应性:对于图形界面应用程序,使用多线程可以避免用户界面”冻结” 提高CPU利用率:当某个线程等待I/O操作时,其他线程可以继续执行,充分利用CPU资源 简化程序结构:对于需要处理多个独立任务的程序,多线程可以提供更清晰的设计 1.3 多线程的挑战 线程安全问题:多个线程同时访问共享数据可能导致数据不一致 死锁问题:线程间相互等待对方释放锁,导致程序无法继续执行 性能问题:线程上下文切换和同步操作会带来额外的开销 2. 线程创建方式2.1 继承Thread类这是最简单的创建线程方式,通过继承Thread类并重写run()方法。但这种方式的缺点是Java不支持多重继承,如果已经...
Java中反射与Spring AOP全面梳理
Java中反射与Spring AOP全面梳理一、知识点详解第一部分:Java 反射机制详解一、反射概述1. 什么是反射?反射是 Java 提供的一种能够在程序运行时动态获取类的所有信息(如类名、方法、属性、构造器、注解等),并能动态操作类属性、调用类方法的机制。 2. 为什么需要反射? 动态性:在编译时无法确定要操作哪个类,只有在运行时才能确定 灵活性:可以突破访问权限的限制,访问和修改类的私有成员 框架开发:Spring、Hibernate、MyBatis 等主流框架的核心技术 3. 反射的优缺点优点: 极大提高了程序的灵活性和扩展性 允许实现通用功能,如对象序列化、动态代理等 缺点: 性能较低:反射操作比直接代码慢 安全性问题:可以绕过权限检查 内部暴露:打破了封装性 4. 核心类与接口反射的核心 API 位于 java.lang.reflect 包中: Class:代表一个类的实体 Field:代表类的成员变量 Method:代表类的方法 Constructor:代表类的构造方法 Array:动态创建和访问数组 Modifier:解析访问修饰符 二、反射 AP...
Java中JVM梳理
Java JVM 知识点全面详细梳理一、JVM 概述与体系结构1. JVM 是什么?Java 虚拟机(JVM)是运行 Java 字节码的虚拟计算机,它提供了跨平台运行 Java 程序的能力。”一次编写,到处运行”的核心就是 JVM。 2. JVM 体系结构1234567891011121314151617181920212223242526272829JVM 体系结构:┌─────────────────────────────────────────────────────────────┐│ JVM ││ ┌───────────────────────────────────────────────────────┐ ││ │ 运行时数据区 (Runtime Data Areas) │ ││ │ ┌─────────────┐ ┌─────────────┐ ┌───────────────┐ │ │...
Java中IO梳理
一、知识点梳理一、Java I/O 概述Java I/O 主要分为以下几种模型: BIO (Blocking I/O):同步阻塞 I/O NIO (New I/O):同步非阻塞 I/O AIO (Asynchronous I/O):异步非阻塞 I/O 二、BIO (Blocking I/O)1. 基本概念BIO 是传统的同步阻塞 I/O 模型,每个连接都需要一个独立的线程处理。 2. 使用场景 连接数较少且固定的应用 简单的客户端/服务器应用 需要简单编程模型的应用 3. 核心类 InputStream/OutputStream:字节流基类 Reader/Writer:字符流基类 FileInputStream/FileOutputStream:文件字节流 FileReader/FileWriter:文件字符流 BufferedReader/BufferedWriter:缓冲字符流 Socket/Serve...
2327-知道秘密的人数
2327-知道秘密的人数题目描述 在第 1 天,有一个人发现了一个秘密。 给你一个整数 delay ,表示每个人会在发现秘密后的 delay 天之后,每天 给一个新的人 分享 秘密。同时给你一个整数 forget ,表示每个人在发现秘密 forget 天之后会 忘记 这个秘密。一个人 不能 在忘记秘密那一天及之后的日子里分享秘密。 给你一个整数 n ,请你返回在第 n 天结束时,知道秘密的人数。由于答案可能会很大,请你将结果对 109 + 7 取余 后返回。 示例 1: 输入:n = 6, delay = 2, forget = 4输出:5解释:第 1 天:假设第一个人叫 A 。(一个人知道秘密)第 2 天:A 是唯一一个知道秘密的人。(一个人知道秘密)第 3 天:A 把秘密分享给 B 。(两个人知道秘密)第 4 天:A 把秘密分享给一个新的人 C 。(三个人知道秘密)第 5 天:A 忘记了秘密,B 把秘密分享给一个新的人 D 。(三个人知道秘密)第 6 天:B 把秘密分享给 E,C 把秘密分享给 F 。(五个人知道秘密) 示例 2: 输入:n = 4, delay = 1...
Java注解梳理
Java 注解(Annotation)是 Java 5 引入的一种元数据(metadata)机制,用于为代码提供附加信息,不直接影响代码逻辑,但可以通过编译器、工具或运行时环境解析并执行特定操作。 一、注解的基本概念 用途: 标记代码行为:如 @Override 标记方法重写。 携带元数据:如 @Test 标记测试方法。 替代配置文件:如 Spring 框架中的 @Component。 编译时检查:如 @FunctionalInterface 校验函数式接口。 运行时处理:如通过反射读取注解并执行逻辑。 分类: 内置注解:Java 提供的常见注解(如 @Override、@Deprecated)。 元注解:用于定义其他注解的注解(如 @Target、@Retention)。 自定义注解:用户自定义的注解。 二、内置注解1. @Override 作用:标记方法为重写父类方法,编译器会校验是否符合重写规则。 示例:123456789101112class Animal { void eat() { System.out.p...
Java泛型梳理
Java泛型梳理一、 泛型是什么?为什么需要它? (The “What” and “Why”)1.1 核心概念:泛型(Generics)是 JDK 5 引入的一个核心特性,它允许在定义类、接口或方法时使用类型参数(Type Parameter)。在使用时(如声明变量、创建实例时)再指定具体的类型实参(Type Argument)。简单说,就是参数化类型。 1.2 主要目的与优势(解决什么问题): 类型安全(Type Safety):在编译期检查类型,将运行时的 ClassCastException 转移到了编译期。这是最重要的优点。 没有泛型前:List 只持有一个 Object 类型的引用,取出的元素需要手动强制转换,容易出错。 有泛型后:List<String> 明确告知编译器它只持有 String,如果存入 Integer,编译器会直接报错。 消除强制转换(Eliminates Casts):代码更简洁,可读性更强。 没有泛型:String s = (String) list.get(0); 有泛型:String s = list.get(0); ...
1317-将整数转换为两个无零整数的和
1317-将整数转换为两个无零整数的和题目描述 「无零整数」是十进制表示中 不含任何 0 的正整数。 给你一个整数 n,请你返回一个 由两个整数组成的列表 [a, b],满足: a 和 b 都是无零整数 a + b = n 题目数据保证至少有一个有效的解决方案。 如果存在多个有效解决方案,你可以返回其中任意一个。 示例 1: 输入:n = 2输出:[1,1]解释:a = 1, b = 1。a + b = n 并且 a 和 b 的十进制表示形式都不包含任何 0。 示例 2: 输入:n = 11输出:[2,9] 示例 3: 输入:n = 10000输出:[1,9999] 示例 4: 输入:n = 69输出:[1,68] 示例 5: 输入:n = 1010输出:[11,999] 提示: 2 <= n <= 104 题解 由于题目中给出的 n 的范围 [2,10000] 较小,因此我们可以直接在 [1,n) 的范围内枚举 A,并通过 n−A 得到 B,再判断 A 和 B 是否均不包含 0 即可。 123456789101112131415161...
3516-找到最近的人
3516-找到最近的人题目描述 给你三个整数 x、y 和 z,表示数轴上三个人的位置: x 是第 1 个人的位置。 y 是第 2 个人的位置。 z 是第 3 个人的位置,第 3 个人 不会移动 。 第 1 个人和第 2 个人以 相同 的速度向第 3 个人移动。 判断谁会 先 到达第 3 个人的位置: 如果第 1 个人先到达,返回 1 。 如果第 2 个人先到达,返回 2 。 如果两个人同时到达,返回 0 。 根据上述规则返回结果。 示例 1: 输入: x = 2, y = 7, z = 4 输出: 1 解释: 第 1 个人在位置 2,到达第 3 个人(位置 4)需要 2 步。 第 2 个人在位置 7,到达第 3 个人需要 3 步。 由于第 1 个人先到达,所以输出为 1。 示例 2: 输入: x = 2, y = 5, z = 6 输出: 2 解释: 第 1 个人在位置 2,到达第 3 个人(位置 6)需要 4 步。 第 2 个人在位置 5,到达第 3 个人需要 1 步。 由于第 2 个人先到达,...
Java集合框架梳理
Java集合框架梳理 一、什么是 Java 集合框架?Java 集合框架是一个统一的、可扩展的体系结构,用于表示和操作集合。它将集合的抽象与具体实现分离,提供了通用的接口、实现类和算法(如排序、搜索),极大地提高了代码的复用性、可读性和可维护性。 在 JCF 出现之前(Java 1.2 之前),开发者需要使用数组、Vector、Hashtable 等结构,这些结构功能单一,且 API 设计不一致。JCF 解决了这些问题。 二、集合框架的核心体系结构JCF 主要分为两大接口分支:Collection 和 Map。 1. Collection 接口 (单列数据)存储一组独立的元素。它有三个主要的子接口: List:有序、可重复 的集合。元素都有对应的顺序索引。 Set:无序、不可重复 的集合。类似于数学中的“集合”。 Queue/Deque:队列 结构,实现了特定的 FIFO(先进先出)或 LIFO(后进先出)等规则。 2. Map 接口 (双列数据,键值对)存储一组 键值对 (Key-Value) 映射。Key 是不可重复的,每个 Key 最多映射到一个 Value...
Java异常处理梳理
mermaid.initialize({ startOnLoad: true, theme: 'default' }); 本文全面介绍了Java异常处理机制。文章首先阐释了异常的概念,即程序运行中中断正常流程的意外事件。接着详细分析了Java异常的体系结构,以 Throwable 为根类,分为 Error (严重错误,程序不应处理)和 Exception (可捕获和处理的异常)两大分支,后者又分为 RuntimeException (非受检异常,程序逻辑错误引起)和非 RuntimeException (受检异常,外部环境因素引起)。 文章系统讲解了三种异常处理机制: try-catch-finally 语句块(捕获和处理异常)、 throws 声明(将异常处理责任交给调用者)和 throw 关键字(主动抛出异常对象)。还介绍了自定义异常的创建方法(继承 Exception 或 RuntimeException ),以及异常处理的最佳实践,如使用try-with-resources自动管理资源、异常链保留完整上下文信息等。此外,文章还提及了异常...
Java语法基础梳理
本文面介绍了Java语言的核心基础知识。文章首先详细讲解了Java的8种基本数据类型(byte、short、int、long、float、double、char、boolean)及其包装类型的特点、范围和使用方法;接着阐述了变量的声明规则、命名规范和常量的定义方式;然后系统梳理了Java提供的各类运算符(算术、关系、逻辑、位运算等)及其用法;还介绍了流程控制语句,包括条件语句(if、switch)、循环语句(for、while、do-while)和跳转语句(break、continue、return);此外,文章还讲解了Java中的三种注释方式,以及基本数据类型和引用数据类型在JVM中的存储位置(栈内存、堆内存、方法区/元空间等)。整体内容涵盖了Java语言基础的核心知识点,结构清晰,示例丰富。 Java语言基础梳理一、基础语法1. 数据类型Java是一种强类型语言,每个变量都必须声明其数据类型。Java的数据类型分为两大类:基本数据类型和引用数据类型。 1.1 基本数据类型(Primitive Data Types)Java有8种基本数据类型,它们是Java语言内...
3025-人员站位的方案数
3025-人员站位的方案数题目描述 给你一个 n x 2 的二维数组 points ,它表示二维平面上的一些点坐标,其中 points[i] = [xi, yi] 。 计算点对 (A, B) 的数量,其中 A 在 B 的左上角,并且 它们形成的长方形中(或直线上)没有其它点(包括边界)。 返回数量。 示例 1: 输入:points = [[1,1],[2,2],[3,3]] 输出:0 解释: 没有办法选择 A 和 B,使得 A 在 B 的左上角。 示例 2: 输入:points = [[6,2],[4,4],[2,6]] 输出:2 解释: 左边的是点对 (points[1], points[0]),其中 points[1] 在 points[0] 的左上角,并且形成的长方形内部是空的。 中间的是点对 (points[2], points[1]),和左边的一样是合法的点对。 右边的是点对 (points[2], points[0]),其中 points[2] 在 points[0] 的左上角,但 points[1] 在长方形内部,所以不是一个合法的点对。 示例...
