- 博客(70)
- 收藏
- 关注
原创 分块查找(索引表查找)
将数据划分为大小相等的块(一般为 √n 大小),并创建一个索引数组(称为块索引)来存储每个块的最大值。分块查找是一种基于分治思想的搜索算法,适用于。(对块索引数组进行二分查找)对于常规的内存中的数据,,找到目标值所在的块。:然后在找到的块内进行。用于存储块索引数组。(如磁盘存储),但需要。它通过将数据分成若干。,从而提高查找效率。,确定目标值的位置。(每块大小为 √n)
2025-03-24 11:04:58
363
原创 插值查找和斐波那契查找
插值查找 数据分布均匀 平均 O(log log n),最坏 O(n) O(1) 均匀分布的大规模数据。斐波那契查找 访问代价高的有序数据 O(log n) O(1) 需要减少访问次数的场景。它通过预测要查找的值可能的位置来减少搜索次数。斐波那契查找适用于存储访问成本高的情况,比如磁盘存储。斐波那契查找基于斐波那契数列来划分搜索区域,适用于。插值查找是一种改进的二分查找,适用于。插值查找更快,但对数据分布要求高;的场景(如磁盘存储)。
2025-03-24 10:27:27
309
原创 正则表达式详解(regular expression)
正则表达式是一种用于匹配字符串的模式,广泛用于搜索、替换、验证等操作。:邮箱、手机号、IP 地址等。
2025-03-20 17:20:10
519
原创 Priority Queue优先队列详解
优先队列(Priority Queue)是一种抽象数据类型,它类似于普通队列,遵循先进先出(FIFO)原则,但在此基础上,每个元素都关联着一个优先级。元素按照优先级顺序被处理,优先级高的元素会优先于优先级低的元素出队,而并非严格按照元素入队的先后顺序。简单来说,它是一种能保证每次取出的元素都是当前队列中优先级最高的元素的数据结构。
2024-12-15 10:58:37
1557
原创 前缀和的两种构造方法
两种方法的区别在于构造的前缀和数组的长度,是nums.length + 1还是nums.length;如果是nums.length;则构造的前缀和preSum[0] = nums[0];如果是nums.length + 1,则构造的前缀和preSum[0] = 0;
2024-12-14 17:16:05
223
原创 并查集(Java)
并查集(Union - Find Set)是一种处理不相交集合的数据结构,主要用于解决动态连通性问题。它支持两种操作:合并(Union)和查找(Find)。例如,在一个社交网络中,判断两个人是否属于同一个社交圈子,或者将两个社交圈子合并为一个,就可以使用并查集来高效地解决。
2024-12-10 11:40:09
385
原创 map.computeIfAbsent() 与 map.putIfAbsent()的异同
适用于已知要插入的具体值的情况。:适用于需要在键不存在时动态计算值的情况,可以避免不必要的计算。
2024-11-07 19:56:56
529
原创 Leetcode 2300.咒语和药水的成功对数——向上取整的技巧
对 potions 排序后,就可以二分查找了:设 x=spells[i],j 是最小的满足 potions[j]>⌊success−1 / x⌋ 的下标,由于数组已经排序,那么下标大于 j 的也同样满足该式,这一共有 m−j 个,其中 m 是 potions 的长度。- 第 1 个咒语:1 * [1,2,3,4,5] = [1,2,3,4,5]。- 第 1 个咒语:1 * [8,5,8] = [8,5,8]。- 第 2 个咒语:3 * [1,2,3,4,5] = [3,6,所以返回 [2,0,2]。
2024-11-04 20:12:15
303
原创 STK11.6破解安装以及安装步骤手册
链接: https://pan.baidu.com/s/1M3t0wVtg4dhiLa5m60WHhQ 提取码: buq7。通过网盘分享的文件:STK11.6。
2024-10-31 21:42:51
624
1
原创 compareTo()方法详解
方法是 Java 中用于比较两个对象的方法,通常用于实现自然排序(natural ordering)。这个方法定义在Comparable接口中,因此任何希望使用方法的类都必须实现这个接口。以下是。
2024-10-17 16:36:57
3212
原创 实现对二维数组的排序
在Java中,对二维数组进行排序通常意味着你想根据某种规则(比如每个子数组的第一个元素、第二个元素等)来对整个数组进行排序。这表明二维数组已经根据每个子数组的第一个元素进行了升序排序。如果你想根据其他规则(比如第二个元素)进行排序,只需在。方法,该方法比较了两个子数组的第一个元素,并返回了比较结果。来根据每个子数组的第一个元素进行排序。在这个例子中,我们定义了一个二维数组。方法中相应地修改比较逻辑即可。由于Java的数组类型。
2024-10-15 20:39:26
337
原创 桶排序算法
桶排序(Bucket Sort)是一种基于分布的排序算法,也被称为箱排序。它的工作原理是将数组分到有限数量的桶(或区间)里,然后对每个桶内的数据分别进行排序,最后依次把各个桶中的记录列出来,从而得到有序序列。桶排序是鸽巢排序的一种归纳结果,当要被排序的数组内的数值是均匀分配的时候,桶排序可以使用线性时间(Θ(n))完成排序。但需要注意的是,桶排序并,因此它不受O(n log n)下限的影响。
2024-10-11 11:05:33
728
原创 JAVA Collections类主要应用API
类是 Java 集合框架(Java Collections Framework)的一部分,它位于java.util包中。这个类提供了对集合(Collection)操作或返回集合的视图的各种静态方法,但不能实例化类(因为它所有的方法都是静态的)。这些静态方法主要用于操作或查询集合,而不是提供新的集合实现。下面是一些。
2024-09-02 11:47:36
766
原创 JAVA Lambda 表达式相关语法
Java中的Lambda表达式是Java 8引入的一个重要特性,它提供了一种清晰且简洁的方式来表示只有一个抽象方法的接口(称为函数式接口)的实例。Lambda表达式本质上是一个匿名方法,它可以让你的代码更加简洁易读。
2024-09-02 11:18:45
786
原创 冒泡排序算法
冒泡排序是一种简单的排序算法,它重复地遍历要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。遍历数列的工作是重复进行的,直到没有再需要交换的元素为止,这意味着数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(或说是排序的开头位置),就如同水中的气泡一样上升到水面。冒泡排序的写法可以简单分为两种方式,分别是:前同后异、前异后同。
2024-08-28 21:25:50
1638
原创 Leetcode 713.乘积小于k的子数组(不定长滑动窗口(求子数组个数))
给你一个整数数组nums和一个整数k,请你返回子数组内所有元素的乘积严格小于k的连续子数组的数目。88 个乘积小于 100 的子数组分别为:[10]、[5]、[2]、[6]、[10,5]、[5,2]、[2,6]、[5,2,6]。需要注意的是 [10,5,2] 并不是乘积小于 100 的子数组。
2024-08-27 18:03:01
363
原创 Leetcode 2799.统计完全子数组的数目(不定长滑动窗口(求子数组个数)
给你一个由整数组成的数组nums。如果数组中的某个子数组满足下述条件,则称之为返回数组中的数目。是数组中的一个连续非空序列。4完全子数组有:[1,3,1,2]、[1,3,1,2,2]、[3,1,2] 和 [3,1,2,2]。10数组仅由整数 5 组成,所以任意子数组都满足完全子数组的条件。子数组的总数为 10。
2024-08-27 17:58:36
301
原创 JAVA var类型详解
在Java中,var关键字并不是传统意义上的一个新类型,而是一个类型推断的增强,它首次在Java 10中被引入作为预览特性(通过JVM 参数启用),并在Java 11中被正式作为预览特性的一部分,最终在Java 14中成为正式功能。var的使用使得局部变量声明更加简洁,但重要的是要理解其背后的类型推断机制以及它的使用限制。
2024-08-27 14:56:12
503
原创 鸽巢原理(抽屉原理)
鸽巢原理(抽屉原理)是一个重要的组合数学原理,它在许多领域都有广泛的应用,包括计算机科学、数学、统计学、经济学等。这个原理以一种非常直观和易于理解的方式说明了在分配有限数量的物体到有限数量的容器中时,至少有一个容器会包含多于一个的物体。
2024-08-24 15:48:07
524
原创 JAVA双端队列Deque详解
Java中的双端队列(Deque, 全称是double-ended queue)是一种具有队列和栈的性质的抽象数据类型。双端队列中的元素可以从两端弹出(在队列的头部和尾部进行添加或删除操作),因此它既可以作为FIFO(先进先出)的队列使用,也可以作为LIFO(后进先出)的栈使用。Java在java.util包中提供了Deque接口,以及它的几个实现类,如ArrayDeque(基于数组的双端队列)、LinkedList(虽然通常用作链表,但它也实现了Deque接口,因此可以作为双端队列使用)。
2024-08-23 22:06:49
1169
原创 JAVA红黑树TreeMap/TreeSet详解
Java中的红黑树是一种自平衡的二叉查找树,它通过特定的旋转和重新着色操作来确保树的高度大致保持在对数级别,从而在平均和最坏情况下都能保证查找、插入、删除等操作的时间复杂度为O(log n)。
2024-08-23 21:30:09
1334
原创 分组循环算法
分组循环算法(Group Round Robin Algorithm)通常用于将一组元素(如任务、数据项等)均匀地分配到多个组中,并可能在这些组之间循环地选择以进行进一步处理。这种算法在负载均衡、任务调度、数据分区等场景中非常有用。
2024-08-22 18:07:03
577
原创 Leetcode 2760.最长奇偶子数组
在这个示例中,我们选择从 l = 1 开始、到 r = 3 结束的子数组 => [2,5,4] ,满足上述条件。在这个示例中,我们选择从 l = 0 开始、到 r = 2 结束的子数组 => [2,3,4]。在这个示例中,我们选择从 l = 1 开始、到 r = 1 结束的子数组 => [2]。因此,答案就是这个子数组的长度 3。可以证明 3 是满足题目要求的最大长度。可以证明 3 是满足题目要求的最大长度。可以证明 1 是满足题目要求的最大长度。以整数形式返回满足题目要求的最长子数组的长度。
2024-08-22 18:02:45
365
原创 秦九韶算法
秦九韶算法是一种将一元n次多项式的求值问题转化为n个一次式的算法,这种算法通过减少乘法的次数,大大提高了多项式求值的效率。秦九韶的这一贡献被详细记载在他的数学著作《数书九章》中,该书系统地总结和发展了高次方程的数值解法与一次同余问题的解法,是中国古代数学的重要里程碑。
2024-08-21 22:42:17
586
原创 计数排序算法
计数排序(Counting Sort)是一种非比较型整数排序算法,其核心在于将输入的数据值转化为键存储在额外开辟的数组空间中。作为一种线性时间复杂度的排序,计数排序要求输入的数据必须是有确定范围的整数。
2024-08-21 15:19:46
724
原创 while循环中潜在的数组越界问题
的存在,实际上并没有执行到会越界的代码行。因此,直接的越界错误不会发生,但代码的设计使得它更容易引入错误或难以理解。此时,循环的下一个迭代(尽管实际上不会发生,因为循环条件已不满足)会尝试访问。是一个有效的索引(即不超过数组的最后一个元素的索引)。然而,在这种情况下,虽然代码在逻辑上存在潜在风险(因为它依赖于。增加1,准备下一次迭代,但循环的条件会阻止它超过。,这是一个越界访问,因为数组索引是从0到。的增加在读取之后发生),但由于循环条件。但关键点是,这个增加是在访问。,即数组的最后一个元素),但紧接着。
2024-08-21 14:53:13
332
原创 Leetcode 1456.定长子串中元音的最大数目
"lee"、"eet" 和 "ode" 都包含 2 个元音字母。任意长度为 2 的子字符串都包含 2 个元音字母。的单个子字符串中可能包含的最大元音字母数。子字符串 "iii" 包含 3 个元音字母。字符串 s 中不含任何元音字母。
2024-08-19 16:23:27
224
原创 定长滑动窗口算法
在Java中实现定长滑动窗口算法,主要用于处理数组或列表中的一系列元素,通过固定大小的窗口来遍历这些元素,并在每个窗口位置执行特定的操作(如求和、查找最大值等)。然后,方法通过一个循环来滑动窗口,每次循环都会从当前和中减去窗口最左边的元素,并加上新进入窗口的元素,从而更新当前和,并将其存储在。以下是一个使用Java实现的定长滑动窗口算法示例,该示例用于计算给定数组中每个滑动窗口内的元素和。在初始化阶段,方法计算了第一个窗口的元素和,并将其存储在。,因为每个窗口都会从数组的开始向后滑动,直到数组末尾的。
2024-08-19 15:40:42
450
原创 Java 9 List.of()的使用
List.of()是 Java 9 引入的一个静态方法,用于创建不可变的列表(这意味着一旦使用List.of()创建了列表,你就不能向其中添加、删除或修改元素。这个方法提供了一种方便的方式来创建包含零个或多个元素的不可变列表。List.of()方法有几个重载版本,允许你传递零个到十个元素作为参数。如果你需要创建包含超过十个元素的列表,你可以使用List.of()方法来组合较小的列表,或者使用其他集合构造方法(如后跟,尽管这不是一个纯粹的不可变列表,因为它仍然可以通过原始数组进行修改)。
2024-08-18 21:55:18
2629
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人