- 博客(25)
- 收藏
- 关注
原创 【算法】倍增思想
倍增算法是一种优化算法,经常用于指数幂的问题的优化,快速幂就是它的直接体现。不仅仅是快速幂,在很多算法题中,都会需要倍增的思想,而且往往不是想快速幂那样直接,而是隐性的,需要挖掘题意。下面给出一道例题,体会倍增思想。
2024-02-05 00:53:35
234
原创 【算法】LCA
倍增算法我们将会定义一个数组fa[i][j]表示结点i向上跳2^j层所到的结点,从而实现了倍增跳跃,而且,通过有限的组合跳跃,我们到达任意结点处。= parent[v][i]的前提下尽可能地大跨步就能保证跳到最近的公共祖先的前一个位置,这个位置上面一层,也就是2^0方层就是公共祖先,同时也是最近的公共祖先。同时,倍增LCA算法中还用到了贪心的思想,假如现在有两个结点x,y,假设x深度更大,则我们要尽可能地让x在不超过y的深度的前提下,尽可能地接近y,也就是跨的步子尽可能大!
2024-02-03 20:24:37
397
原创 【javaSE】数组
数组,是多个数据按排列的集合,并通过的方式对这些数据管理。本质上就是一系列空间且的一片存储空间。根据维度,数组可以分为和等等。
2024-02-02 12:59:00
257
原创 关于异或前缀和
参考普通前缀和,定义一个前缀和数组为 s[n],令 s[i] = s[i-1]^a[i],则对于一个区间 [l,r]的异或和为 s[r]^s[l-1]。主要利用了 a ^ a = 0的这一性质。通过异或前缀和,我们可以快速求出某一区间的异或和。今天刷到一题需要使用异或前缀和,记录一下。
2024-01-31 22:59:30
377
原创 【算法题】四个瓷瓶的神秘问题
其实上面的第二步,形象点来说,还是往最大的哪个瓷瓶里集中珍珠的一个过程,比如现在有(0,a,b,c)这样四个从小到大的瓷瓶,执行步骤二,0+2,a-1,b-1,c-1,执行步骤一,0+1,a-2,b-2,c+1,再次执行步骤一,0,a-3,b-3,c+3,如此重复,其实就是不断往c瓷瓶集中。在古老的中国,有一个神秘的传说。在一座寺庙中,有四个精美的瓷瓶,每个瓷瓶中都装有神秘的珍珠。你的任务是,给定四个瓷瓶中珍珠的初始数量,计算阿坤老师通过以上操作后,四个瓷瓶中最多珍珠的数量最大可以是多少。
2024-01-31 00:34:31
232
原创 Codeforces Round 898
如果我们从Valeriu的节点进行深度优先搜索,当我们遇到一个已经访问过的节点,而不是当前节点的父节点时,该节点是循环的一部分。此外,这也是Valeriu进入循环的节点。这是因为如果Valeriu处于一个循环中,那么他总是有22可以选择的建筑,他可以在那里奔跑。分析:用一个数组先计算出个点长度,在对区间长度二分。因为我们有一棵树外加一条边,我们的图正好有一个循环。反思:只想到了双指针暴力枚举且累加,没有用前缀和!分析:一眼二分,求h可行区间最大值。分析:替换成吃豆子。分析:为简单模拟题。
2023-09-22 23:04:36
267
1
原创 <算法笔记>尺取法
扫描序列时,一般做法会使用二重循环O(n方),尺取法会将两个循环优化为一个,从而达到O(n)的时间复杂度。在尺取法中,i和j有两种扫描方向:反向扫描和同向扫描。尺取法(又称双指针)是算法竞赛中常用的一个优化技巧,用来解决序列区间问题。
2023-09-20 15:54:46
105
1
原创 <算法笔记>堆
一般情况下,有两种类型的堆:最大堆和最小堆。在最大堆中,每个节点的值都大于或等于它的子节点的值,而在最小堆中,每个节点的值都小于或等于它的子节点的值。堆是一种特殊的数据结构,通常用于实现优先队列和排序算法。堆通常被描述为一棵完全二叉树,其中每个节点都比它的子节点大(或者小)。堆的操作有两种:上浮和下沉,上浮对应优先队列的插入操作push(),下沉对应优先队列的删除队头的操作()。
2023-09-18 21:47:24
51
1
原创 <算法笔记>二叉树和哈夫曼树
二叉树是一种常用的树形结构,每个节点最多有两个子节点,分别成为左孩子和右孩子,以它们为根的子树称为左子树和右子树。如果一个二叉树的每层节点数都是满的,那么它被称为满二叉树。如果一个二叉树只有最后一层未满,且缺失的节点都在右边,则被称为完全二叉树。从根到节点u的路径长度定义为u的深度,节点u到它的叶子节点的最大路径长度定义为节点u的高度,根的高度最大,称为树的高。
2023-09-18 09:12:32
79
1
原创 <算法笔记>队列
顾名思义,队列是一种先进先出的数据结构。队列有两种实现方式,链队列和循环队列。链队列可以看作是单链表的一种特殊情况,而循环队列则是一种顺序表,使用一组连续的存储单元依次存放队列元素,用两个指针head和tail分别指示队头和队尾元素,当其中一个走当头时,便会回到开始位置,形成循环。
2023-09-11 22:02:53
30
原创 <算法笔记>链表
使用链表时,可以直接使用STL list,也可以自己实现,通常实现方法有动态链表和静态链表。在算法竞赛中,选手通常使用STL list减少编译时间和书写时间,有时也会手动实现静态链表,而对于能及时释放空间的动态链表,则往往不会使用,这是因为它需要管理空间,容易出错,且大多算法竞赛并不会对内存要求过于苛刻。是用一组位于任意位置的存储单位存储线性表的结构,它与数组不同在于,数组是的存储单元是连续的,而链表。,因此,在有关插入、删除的操作中,我们使用链表会更加方便快捷。
2023-09-11 07:25:05
57
原创 【模板】二分
二分查找(英语:binary search),也称折半搜索(英语:half-interval search)、对数搜索(英语:logarithmic search),是用来在。
2023-07-01 13:00:44
34
原创 java中便捷查找符合某个规则的值的方法
以上代码中,通过调用 Arrays.stream() 方法将数组转换成 IntStream 对象,然后使用 filter() 方法筛选出符合条件(即为偶数)的元素,最后通过 toArray() 方法将结果转换成整型数组。Java 8 引入了 Stream API,可以通过 stream.filter() 方法实现非常便捷的筛选功能。
2023-05-08 13:44:59
180
原创 Java有关内部类
成员内部类可以被一些修饰符所修饰,比如private,默认,protected,public,static(静态内部类)等。的类,因此也称为嵌套类(Nested Class)。内部类对象依赖于外部类对象存在。创建内部类对象之前,必须先创建外部类对象实例。方式二:外部类名.内部类名 对象名 = 外部类对象.内部类对象,例如。内部类可以实现回调函数,例如将内部类的引用传给其他的对象,从而实现。,例如在某个方法中使用一个匿名内部类,可以让代码更加简洁明了。必须先创建内部类的对象再通过内部类对象访问其方法。
2023-04-15 15:42:19
35
原创 接口的基础知识
在 Java 中,接口(Interface)是一种特殊的抽象类,用于描述一组方法的集合而不提供实现。任何类只要实现了接口中所定义的所有方法,就可以称为实现了该接口。Java 中的一个类可以同时实现多个接口,这可以通过用逗号分隔多个接口来实现。实现接口的类可以正常地继承其他类,并可以在类中添加自己的成员变量和方法。在 Java 中,接口(Interface)是一种特殊的抽象类,用于描述一组方法的集合而不提供实现。在一个类中实现一个接口时,必须实现该接口中定义的所有抽象方法,否则该类必须也是一个抽象类。
2023-04-13 20:01:50
115
1
原创 ArrayList基础知识
提供了一系列的方法:ArrayList提供了一系列的方法,比如add(), remove(), get()等,用于方便地操作元素,避免了手动维护数组的麻烦。集合元素可以是任意类型:在ArrayList中,我们可以添加任何类型的对象,包括自定义类型等,这为编程带来了更大的灵活性和便利性。但如果需要存储大量基本类型值,推荐使用基本类型数组(如int[]、double[]等)来代替集合,因为数组的性能更高。在Java中,集合框架提供了一系列针对不同需求的接口和类,其中包括存储基本类型值的接口和类,如。
2023-04-13 19:29:40
298
1
原创 作业5(继承、抽象、接口、多态)总结
2.使用String.format()方法:String.format()方法类似于C语言中的sprintf函数,它可以根据指定的格式化字符串格式化输出结果。Java中可以使用BigDecimal类的setScale()方法实现四舍五入。1.使用DecimalFormat类:DecimalFormat类可以帮助我们将数字格式化为指定的模式,以便于输出。方法用于比较当前对象和另一个对象的大小,返回值为int类型,根据返回值的正负来决定两个对象的大小。使用Comparator实现比较方法来进行自定义排序。
2023-04-13 16:56:13
44
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人