- 博客(36)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 常用的设计模式汇总
设计模式合集23种设计模式,一个没少。比较常用的:单例、工厂、适配器、装饰者、代理、观察者这几个模式。其他的做个了解。单例模式作用:确保一个类只有一个实例,只对外提供一个访问该实例的全局访问点。特征:1、无法通过new得到实例,构造器是被private修饰的2、一般通过getInstance()的方法来获取它们的实例,而getInstance方法是对象的引用,并不是真正的new一个对象对于单例模式,又分为这几类饿汉式单例模式我的理解就是饿汉就是初始化就对对象加载,没有延时public c
2020-05-28 11:37:16
2672
4
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 排序算法汇总
排序排序:将原本无序的序列按照关键字排列成有序的序列。排序的稳定性:是指待排序的排序序列中有两个或两个以上相同的关键字,排序前和排序后这些关键字的相对位置没有发生变化。eg: 排序前:2 3(a) 7 3(b) 1 3©排序后:1 2 3(a) 3(b) 3© 7这样的排序就是稳定的,如果出现:排序后:1 2 3(a) 3© 3(b) 7则该排序是不稳定的内部排序内部排序:将所有待排的数据全部载入到计算机内存中。外部排序:文件比较大或数据量多涉及到对外部存储器的操作。分类交换类排
2020-05-12 23:17:53
389
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 数据结构:图论(二)最短路径
起床继续写图论!!!!!!!!!!!!!!最短路径分类单源最短路径问题:从某固定源点出发,求其 到所有其他顶点的最短路径分为有向图和无向图多源最短路径问题:求任意两顶点间的最短路 径先熟悉无权图的最短路,方便后面理解有权图的最短路径问题。无权图的最短路算法给定某一个顶点,求该顶点到其余顶点的最短路径。例给定V3,要求出V3到个顶点的路径最短长度,即为1、首先要确定对图的遍历方式...
2020-05-06 13:28:56
1367
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 C++win32实现俄罗斯方块(类实现)
C++win32实现俄罗斯方块头文件源文件:背景类的源码.h文件#pragma onceclass bg{public: bg(void); int getmark(); int addmark(int num);public: int background[20][10];private: int mark ;};.cpp文件#include "Std...
2020-03-30 15:38:34
3436
8
原创 算法:各位相加(数根问题)
题目来自leecode。给定一个非负整数 num,反复将各个位上的数字相加,直到结果为一位数。输入: 38输出: 2 解释: 各位相加的过程为:3 + 8 = 11, 1 + 1 = 2。 由于 2 是一位数,所以返回 2。进阶:你可以不使用循环或者递归,且在 O(1) 时间复杂度内解决这个问题吗?先不考虑进阶的方法,用递归迭代是比较容易实现的 public int addDigits(int num) { if(num < 10) { return nu
2020-08-30 12:26:33
982
原创 数据结构与算法:单调栈的使用
单调栈的初次使用输入: nums1 = [4,1,2], nums2 = [1,3,4,2].输出: [-1,3,-1]解释: 对于num1中的数字4,你无法在第二个数组中找到下一个更大的数字,因此输出 -1。 对于num1中的数字1,第二个数组中数字1右边的下一个较大数字是 3。 对于num1中的数字2,第二个数组中没有下一个更大的数字,因此输出 -1。之前有遇到过类似这样的问题,都是关于求数组更大元素的问题,当时并不太清楚单调栈的使用,而是通过暴力解法对数组疯狂
2020-06-20 20:50:10
246
1
原创 数据结构与算法:前缀和的问题
例题:给你一个链表的头节点 head,请你编写代码,反复删去链表中由 总和 值为 0 的连续节点组成的序列,直到不存在这样的序列为止。删除完毕后,请你返回最终结果链表的头节点。数据案例输入:head = [1,2,-3,3,1]输出:[3,1]提示:答案 [1,2,1] 也是正确的。输入:head = [1,2,3,-3,4]输出:[1,2,4]输入:head = [1,2,3,-3,-2]输出:[1]之前有做过找最大前缀和的问题,感觉这个连续最大为0的链表题也应该类似。但是对于
2020-06-10 11:20:02
361
原创 数据结构与算法:关于链表的排序Sort List
链表的归并排序对一个链表排序,要求时间复杂度O(NlogN),空间复杂度为常量级。对于时间复杂度的选择,比较容易想到用归并排序或者快速排序,但是归并排序的空间复杂度在O(N)。对于数组的归并排序确实需要开辟另一个数组作临时存储,对于链表其实可以少了这一步。只要用dummyHead给一个虚拟的头结点就很好操作整个链表。剩下就是归并排序的迭代实现和递归实现。于是在我一下午的操作下,还是选择了递归实现。迭代实现真心不容易主要解题步骤:1、二路归并的使用2、链表的切割(通过快慢指针完成链表的对半切割)3
2020-05-26 15:59:14
458
原创 PAT:06-图3 六度空间
06-图3 六度空间“六度空间”理论又称作“六度分隔(Six Degrees of Separation)”理论。这个理论可以通俗地阐述为:“你和任何一个陌生人之间所间隔的人不会超过六个,也就是说,最多通过五个人你就能够认识任何一个陌生人。”如图1所示。“六度空间”理论虽然得到广泛的认同,并且正在得到越来越多的应用。但是数十年来,试图验证这个理论始终是许多社会学家努力追求的目标。然而由于历史的原因,这样的研究具有太大的局限性和困难。随着当代人的联络主要依赖于电话、短信、微信以及因特网上即时通信等工具,能
2020-05-25 14:31:32
567
原创 PTA:06-图2 Saving James Bond - Easy Version
Saving James Bond - Easy VersionThis time let us consider the situation in the movie “Live and Let Die” in which James Bond, the world’s most famous spy, was captured by a group of drug dealers. He was sent to a small piece of land at the center of a lake
2020-05-25 14:21:54
266
原创 JAVA笔记:正则表达式
简介正则表达式一般适用于复杂文本的处理,是强大又灵活的文本处理工具,几乎所有的编程语言都支持正则表达式。主要是通过一个规则匹配一类字符串正则表达式规则图源于百度,侵权删。一直保存了这个图片,个人觉得这个图就够大部分正则表达式使用了正则表达式的使用在JAVA中java,util.regex包下已经封装好了大部分的方法核心类:Pattern:正则表达式的编译表示形式。Pattern p = Pattern. compile ( r,int ) ; //建立正则表达式,并启用相应模式Mat
2020-05-25 13:16:13
228
原创 JAVA基础(五):基本的I/O流
介绍在Java程序中,对于数据的输入/输出操作以“流” (stream) 方式进行,I/O是实现输入输出的基础。将磁盘文件、网络连接等读入程序称为输入流。将内容写出到文件、磁盘等称为输出流。流分类方向分类输入流:从数据源读入程序(InputStream、Reader)输出流:从程序读出(OutputStream、Writer)作用分类节点流:从数据源或目的地读写数据处理流:对节点流进行封装,提高操作和性能区别:1、节点流处于io操作的基础,所有流操作都要用节点流2、处理流可以对其他流处
2020-05-24 20:37:44
331
原创 JAVA基础(四):注解与反射
annotation注解:1、对程序做出解释,与程序无关2、可以被其他程序(编译器)读取。注解与注释的区别:注解具有注解信息处理流程使用方式:注解通过@注释名在代码中表达,不同的注解还有不同的内置参数,如@SuppressWarnings(value = “Uncked”)可以在package|class|method|field等上面,对他们添加注解信息,并且可以通过反射机制对这些数据访问内置注解1、Override只用于方法修饰,表示一个方法声明打算重写超类的另一个方法声明2
2020-05-23 23:26:23
350
原创 数据结构与算法:双指针的应用
双指针的应用Given a linked list, remove the n-th node from the end of list and return its head.Example:Given linked list: 1->2->3->4->5, and n = 2.After removing the second node from the end, the linked list becomes 1->2->3->5.题意:很简单就是删
2020-05-22 17:33:37
235
原创 数据结构与算法:哈希
哈希哈希/散列(Hashing):通过关键字Key映射到散列地址上,存储Value。属于查找算法查找算法查找的本质:给定已知对象找到位置1、顺序查找:时间复杂度O(N)2、二分查找:O(logN)3、二叉搜索树O(h) h:二叉树的高度平衡二叉树 O(logN)4、哈希查找:几乎是常量O(1),与问题的规模无关散列查找关键1、如何计算元素存储的位置必须构造散列函数确定Key存储位置2、如何解决冲突?不同的关键字可能会映射到同一个散列地址,即为冲突,所以必须采取某种方法结局多个关键字
2020-05-21 11:11:36
739
原创 PTA:05-树7 堆中的路径
将一系列给定数字插入一个初始为空的小顶堆H[]。随后对任意给定的下标i,打印从H[i]到根结点的路径。输入格式:每组测试第1行包含2个正整数N和M(≤1000),分别是插入元素的个数、以及需要打印的路径条数。下一行给出区间[-10000, 10000]内的N个要被插入一个初始为空的小顶堆的整数。最后一行给出M个下标。输出格式:对输入中给出的每个下标i,在一行中输出从H[i]到根结点的路径上的数据。数字间以1个空格分隔,行末不得有多余空格。输入样例:5 346 23 26 24 105 4 3
2020-05-21 00:14:08
317
原创 JAVA基础(二):容器
容器框架数组数组是相同类型数据的有序集合:1、相同类型的若干个数据,按照一定先后次序排列组合而成。2、 其中,每一个数据称作一个数组元素3、每个数组元素可以通过一个下标来访问它们.数组的特点:1、 其长度是确定的。数组一旦被创建,它的大小就是不可以改变的。2、 其元素必须是相同类型,不允许出现混合类型3、 数组中的元素可以是任何数据类型,包括基本类型和引用类型。数组的创建int[] s = new int[10];//创建并初始化int[] a = {1,2,3,4,5};二
2020-05-21 00:01:44
187
原创 JAVA基础(一):常用类
JAVA基础学习路线常用类包装类包装类:Java中的基本数据类型没有方法和属性,而包装类就是为了让这些拥有方法和属性,实现对象化交互。JAVA并不是纯面向对象的语言。Java语言是一个面向对象的语言,但是Java中的基本数据类型却 是不面向对象的。但是我们在实际使用中经常需要将基本数据转化成对象,便于操作。比如: 集合的操作中。 这时,我们就需要将基本类型数据转化成对象!包装类均在java.lang包中,包装类跟基本数据类型的对应关系关于int的包装类测试@Test void test
2020-05-20 17:34:53
333
1
原创 04-树5 Root of AVL Tree
An AVL tree is a self-balancing binary search tree. In an AVL tree, the heights of the two child subtrees of any node differ by at most one; if at any time they differ by more than one, rebalancing is done to restore this property. Figures 1-4 illustrate t
2020-05-13 23:15:42
132
原创 PTA:04-树4 是否同一棵二叉搜索树
给定一个插入序列就可以唯一确定一棵二叉搜索树。然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到。例如分别按照序列{2, 1, 3}和{2, 3, 1}插入初始为空的二叉搜索树,都得到一样的结果。于是对于输入的各种插入序列,你需要判断它们是否能生成一样的二叉搜索树。输入格式:输入包含若干组测试数据。每组数据的第1行给出两个正整数N (≤10)和L,分别是每个序列插入元素的个数和需要检查的序列个数。第2行给出N个以空格分隔的正整数,作为初始插入序列。最后L行,每行给出N个插入的元素,属于L个需要检查
2020-05-13 23:10:54
149
原创 PTA:03-树3 Tree Traversals Again
An inorder binary tree traversal can be implemented in a non-recursive way with a stack. For example, suppose that when a 6-node binary tree (with the keys numbered from 1 to 6) is traversed, the stack operations are: push(1); push(2); push(3); pop(); pop(
2020-05-13 23:08:28
183
原创 PTA:03-树2 List Leaves
Given a tree, you are supposed to list all the leaves in the order of top down, and left to right.Input Specification:Each input file contains one test case. For each case, the first line gives a positive integer N (≤10) which is the total number of node
2020-05-13 23:05:09
131
原创 PTA:03-树1 树的同构
给定两棵树T1和T2。如果T1可以通过若干次左右孩子互换就变成T2,则我们称两棵树是“同构”的。输入格式:输入给出2棵二叉树树的信息。对于每棵树,首先在一行中给出一个非负整数N (≤10),即该树的结点数(此时假设结点从0到N−1编号);随后N行,第i行对应编号第i个结点,给出该结点中存储的1个英文大写字母、其左孩子结点的编号、右孩子结点的编号。如果孩子结点为空,则在相应位置上给出“-”。给出的数据间用一个空格分隔。注意:题目保证每个结点中存储的字母是不同的。输出格式:如果两棵树是同构的,输出“Ye
2020-05-13 23:02:33
288
原创 PTA:02-线性结构4 Pop Sequence
堆的应用题目源于陈越、何钦铭-数据结构Given a stack which can keep M numbers at most. Push N numbers in the order of 1, 2, 3, …, N and pop randomly. You are supposed to tell if a given sequence of numbers is a possible pop sequence of the stack. For example, if M is 5 and
2020-05-13 22:58:16
268
原创 PAT:02-线性结构2 一元多项式的乘法与加法运算
一元多项式的乘法与加法运算题目设计函数分别求两个一元多项式的乘积与和。输入格式:输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。输出格式:输出分2行,分别以指数递降方式输出乘积多项式以及和多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。零多项式应输出0 0。输入样例:4 3 4 -5 2 6 1 -2 03 5 20 -7 4 3 1输出样例:15 24 -2
2020-05-13 22:54:15
153
原创 数据结构:图论(一)基本概念、存储结构以及图的遍历
图论太难了,花了很久很久的时间,现在还是一知半懂,这期先更一些图论的基本概念!基本概念定义图是由结点的有穷集合V和边的集合E组成,若两个顶点之间存在一条边,则表示这两个顶点具有相邻关系有向图和无向图有向图表示每条边都有方向,无向图表示每条边都没有方向弧:在有向图中,含箭头的一段叫弧头,尾部叫弧尾,记为<V1,V2>有向图的边max:如果有向图中有n个顶点,则最多有n(n...
2020-05-05 21:14:19
697
原创 数据结构:树的基本概念、二叉树、二叉搜索树、大小顶堆
树的基本概念树是一种非线性的数据结构!学过图论的小伙伴可以跳过以下环节树的定义:①如果树的结点个数为0,则树为空树②如果树的结点个数为1,则该结点是被称为根结点的结点③如果树的结点个数大于1,则必存在一个称为根的结点,它的分支下是几个互不相交的有限集合,并且这些互不相交的有限集合本身又是一棵树。(1)结点(node)树的结点由数据元素及其若干分支组成,结点不仅包含数据元素,而且包含指...
2020-04-19 16:09:10
692
原创 一篇帮助理解KMP算法的文章(附C++/Java源码)
先上需求给定一个 str 字符串和一个 value 字符串,在 str 字符串中找出 value 字符串出现的第一个位置 (从0开始)。其实就是C语言的 strstr() 以及 Java的 indexOf() 实现原理。输入案例:str:"hello" value=“ll”输出案例:2暴力解法用一个长指针i跟短指针j分别指向主串跟模式串,从左往右,一个一个匹配,如果匹配,如果出现不匹配...
2020-04-11 22:01:10
232
原创 C/C++项目:图片加密小工具
介绍之前用过一款加密的处理器,能把一张图片+文件制作成一个图片,但是如果把图片的后缀改成.zip就能看到里面的文件这样如果我们有什么小秘密 就可以把私密文件藏到一个图片里面,有需要的时候再改后缀取出原理当然作为程序员,自然想要亲手做一个这样的小工具其实原理很简单计算机读取文件时,会通过后缀将文件读入缓冲流,两个文件之间会有标识,通过后缀就能够识别出不同的文件样式所以代码实现并不难v...
2020-04-01 11:28:01
940
原创 Java小游戏项目(一):飞机与子弹的实现
飞机大战项目刚学Java时用Frame写的一个飞机子弹的小游戏项目,难度不大,学了frame的小伙伴可以试试手核心包:背景和飞机
2020-04-01 10:42:11
1568
1
原创 C/C++数据结构:线性表的顺序存储
线性表的顺序存储结构特点: 1、物理地址相邻 2、随机存取:可以计算出每个数据元素的存储地址(**数组**) 在数据结构(严蔚敏C语言)中,顺序表实现的代码如下:时间复杂度的分析: 顺序表时间主要花费在移动元素中,移动元素的个数取决于插入或删除元素的位置结论: 顺序表中插入或删除一个数据元素,平均移动一半的元素 算法ListInsert_Sq和ListDelete_Sq的时间复...
2020-04-01 09:59:41
293
原创 PTA-01-复杂度2 Maximum Subsequence Sum(C/C++)
Given a sequence of K integers { N1, N2, …, NK }. A continuous subsequence is defined to be { Ni, Ni+1, …, Nj } where 1≤i≤j≤K. The Maximum Subsequence is the continuous subsequence w...
2020-04-01 09:16:26
145
原创 PTA 01-复杂度1 最大子列和问题(C/C++)
给定K个整数组成的序列{ N1, N2, …, NK },“连续子列”被定义为{ Ni, Ni+1, …, Nj },其中 1≤i≤j≤K。“最大子列和”则被定义为所有连续子列元素的和中最大者。例如给定序列{ -2, 11, -4, 13, -5, -2 },其连续子列{ 11, -4, 13 }有最大的和20。现要求你编写程序,计算给定整数序列的最大子列和。...
2020-04-01 09:10:21
525
原创 时间复杂度-二分查找(binarySearch)
本题要求实现二分查找算法。函数接口定义:Position BinarySearch( List L, ElementType X );L是用户传入的一个线性表,其中ElementType元素可以通过>、==、<进行比较,并且题目保证传入的数据是递增有序的。函数BinarySearch要查找X在Data中的位置,即数组下标(注意:元素从下标1开始存储)。找到则返回下标,否则返回一个...
2020-03-30 14:54:53
1636
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人