- 博客(12)
- 收藏
- 关注
原创 Java抽象类和接口异同点
Java抽象类和接口异同点 抽象类 要点提示:抽象类不可以用于创建对象。抽象类可以包含抽象方法,这些方法将在具体的子类中实现。 在继承的层次结构中,每个新的子类都使类变得更加明确和具体。如果从一个子类向父类追溯,类就会变得更通用、更加不明确。类的设计应该确保父类包含它的子类的共同特征。有时候,一个父类设计得非常抽象,以至于它都没有任何具体的实例。这样的类称为抽象类(abstract class)。 抽象类和常规类很像,但是不能使用new操作符创建它的实例。抽象方法只有定义而没有实现。它的实现由子类提供。
2021-12-10 16:29:16
286
原创 Polymorphism
多态 多态意味着父类型的变量可以引用子类型的对象 继承关系使一个子类能继承父类的特征,并且附加一些新特征。子类是它的父类的特殊化,每个子类的实例都是其父类的实例,但是反过来不成立。例如:每个圆都是一个几何对象,但并非每个几何对象都是圆。因此,总可以将子类的实例传给需要父类型的参数。考虑以下程序中的代码。 public class PolymorphismDemo { public static void main(String[] args) { displayObject(ne
2021-11-26 16:01:25
377
原创 Java正则学习记录
正则表达式语法 java中需要用\\来表示\ 正则表达式 匹配 . 任意单个字符,除了换行 (ab | cd) ab或者cd [abc] a、b或者c [^acb] 除了a、b或者c外的任意字符 [a-em-p] a到e或者m到p a-e&&[c-p]] a到e与c到p的交集 \d 一个数字(大写D表示非数字) \w 单词字符 \s 空白字符 p* 0或者多次出现模式p(p中有多个元素要用括号括起来,,下面同理) p+ 1或者多次出现模
2021-10-29 16:11:24
177
原创 vscode配置java并用git上传GitHub
一. 用vscode配置java 上网下载JDK配置文件(不多赘述),下载过程中看清JDK下载到本地电脑的地址 在编辑系统环境变量中在系统变量中新建JAVA_HOME变量,变量值为JDK所在地址
2021-09-29 10:12:52
395
原创 2021-02-02
背包问题 一.0/1背包 1.问题模型:给定N个物品,其中第i个物品的体积为Vi,价值为Wi。有容积为M的背包,要求选择一些物品放入背包,使得物品总体积不超过M的前提下,物品的总体积最大。 2. dp[i,j]=Max(dp[i-1,j],dp[i-1,j-Vi]+Wi) memset(dp, 0xcf, sizeof(dp)); //-inf f[0][0] = 0; for (int i = 1; i <= n; i++) { for (int j = 0; j <= m; j++) {
2021-02-02 20:09:19
141
原创 2021-01-30
最短路 一.任意两点间的最短路径(Floyd) 借用了动归的思想,d[i,j]保存i到j 的最短路长度 动态转移方程:d[ i , j ]=min(d[ i , j ],d[ i, k ]+d[ k , j ]) void floyd(int n) { for (int k = 1; k <= n; k++) { for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) { dis[i][j] = Min(d
2021-01-30 19:02:10
253
原创 2021-01-26
贪心 一.思想:就是走一步看一步,每一步选取当前面临的最优选择,但是这样的目光是短浅的 比如说一个二叉树,只能选择一个子树上的数进行相加然后从选择的子树出发,继续向下找,求最大总和 用贪心的思想你会选择19,然后再选择2。事实上这不是最大的,17-4-100的这条路才是最大的,所以贪心是“目光短浅的” 选用贪心需要满足两个特征: 1.最优子结构。就是说,从局部最优能扩展到全局最优 2.贪心选择性质。问题的整体最优解可以通过一系列的局部最优的选择来得到。 二。常见问题 1.活动安排问题 例题hdu-2037
2021-01-26 16:24:20
183
1
原创 2021-01-26
线段树 一.让你求最区间的区域和之类的其他(或者其他满足交换律的) 二.权值线段树。 1.就是用一个桶(数组)来装一个区间的数在出现的次数 添加 void add(int l, int r, int v, int x) { if (l == r)f[v]++;//f[]用来存x出现的次数 else { int mid = (l + r) / 2; if (x <= mid)add(l, mid, v << 1, x); else add(mid + 1, r, v <
2021-01-26 00:05:10
93
原创 2021-01-23
搜索 一.三种图的存储方式 1.邻接矩阵:适合稠密图,但是十分浪费空间,并且存储的时间复杂度高 2.邻接表适用于规模大的稀疏图,存储复杂度为O(V+E) 使用STL的vecto来存储 //定义边 struct edge { int from, to, w; edge(int a, int b, int c) { from = a; to = b; w = c; } }; vector<edge>e[MAXN]; //初始化 for (int i = 1; i <= n; i
2021-01-24 09:22:51
140
1
原创 2021-01-23
1-22二分法 一.1:while(l<r)时 l=mid的时候,mid=(l+r+1)>>1;r=mid-1; r=mid的时候,mid=(r+l)>>1;l=mid+1; 不然就会进入死循环,从而超时 这种情况都是会把logn取满的; 2.在序列是升序的情况下: upper_bound(start,last,n):返回的是被查序列中第一个大于n的指针; lower_bound(start,last,n):返回的是查序列中第一个大于等于n的指针 在序列是降序的情况下: low
2021-01-23 00:45:32
448
原创 2021-01-21
1-21并查集 一.基础知识(不多赘述) 1.查询; 2.合并; (并查集擅长动态维护许多具有传递性的关系) 二.两大并查集:1.扩展域并查集。2:边带权并查集 1.POJ-1182(食物链) 本题选用扩展域的方法; 把每个动物拆成三个节点,同类域self,捕食域eat,天敌域enemy; 若“x与y是同类”,说明”x的同类“与“y的同类”一样,同理x,y的捕食域与天敌域也是一样的,所以只要合并x,y的self,eat,enemy 同理若“x吃y”就合并x_eat与y_self,x_self与y_enemy
2021-01-21 17:58:03
151
1
原创 2021-01-20
1.20的STL学习 一.string 1.strlen()的复杂度为o(n),而.length()的复杂度为o(1); 2.find()函数的用法: string s1("11123456"); int p = -1; //寻找所有的"1"的位置 while (s1.find("1", p + 1) != -1) {//如果找不到find()行数返回-1 p = s1.find("1", p + 1); cout << p << "\n"; } 二.erase的使用误区 se
2021-01-20 20:26:19
181
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人