自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【算法】倍增思想

倍增算法是一种优化算法,经常用于指数幂的问题的优化,快速幂就是它的直接体现。不仅仅是快速幂,在很多算法题中,都会需要倍增的思想,而且往往不是想快速幂那样直接,而是隐性的,需要挖掘题意。下面给出一道例题,体会倍增思想。

2024-02-05 00:53:35 234

原创 【算法】LCA的三种算法

离线用Tarjan,在线用倍增。:)

2024-02-04 21:15:31 2490

原创 【算法】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】Arrays工具类

Arrays是处于java.util下的一个工具类,此类包含了用于操作数组的各种方法。

2024-02-02 15:06:22 428

原创 【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

原创 <算法笔记>栈

栈的特点是先进后出,编程时通常直接使用STL stack,或者自己手写栈。

2023-09-13 20:28:10 42 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

原创 JDK8时间类

2023-04-28 00:09:49 41

原创 java.JDK7时间类

时间原点:

2023-04-27 23:35:41 50

原创 java常用类.Math

2023-04-26 12:44:42 30

原创 java.正则表达式及爬虫

爬取: 有条件的爬取: 分组:

2023-04-26 12:42:58 108

原创 Java有关内部类

成员内部类可以被一些修饰符所修饰,比如private,默认,protected,public,static(静态内部类)等。的类,因此也称为嵌套类(Nested Class)。内部类对象依赖于外部类对象存在。创建内部类对象之前,必须先创建外部类对象实例。方式二:外部类名.内部类名 对象名 = 外部类对象.内部类对象,例如。内部类可以实现回调函数,例如将内部类的引用传给其他的对象,从而实现。,例如在某个方法中使用一个匿名内部类,可以让代码更加简洁明了。必须先创建内部类的对象再通过内部类对象访问其方法。

2023-04-15 15:42:19 35

原创 java中根据对象属性值去重

接口的比较器对象,用于按照指定规则进行排序。对象时传入一个实现了。

2023-04-13 21:38:41 358 1

原创 接口的基础知识

在 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关注的人

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