
数据结构与算法学习笔记
文章平均质量分 65
seabearlmx
计算机视觉
展开
-
lincode之Majority Number III
problem:原创 2014-11-24 12:18:41 · 838 阅读 · 0 评论 -
算法(第四版)学习笔记之java实现栈和队列(链表实现)
java链表实现堆栈和队列原创 2015-07-20 17:51:20 · 1042 阅读 · 0 评论 -
算法(第四版)学习笔记之java实现能够动态调整数组大小的栈
java实现能够动态调整数组大小的栈原创 2015-07-20 16:33:40 · 1619 阅读 · 0 评论 -
算法(第四版)学习笔记之java实现选择排序
选择排序步骤:1.找到数组中参与遍历比较的所有元素中的最小元素的下标;2.将最小元素与数组中参与遍历比较的第一个元素进行交换(如果第一个元素就是最小元素的话,那么也会进行一次交换);3.若数组中还有需要参与遍历比较的元素,则跳转到步骤1;否则排序结束。在算法第四版中给出的所有排序均是适用于任意实现了Comparable接口的数据类型,若要将数字作为测试用例,请勿使用基本数据原创 2015-07-22 16:02:49 · 1139 阅读 · 0 评论 -
算法(第四版)学习笔记之java实现插入排序
插入排序:插入排序是在遍历元素的过程中,当前索引左边的所有元素都是有序的,但最终位置是不确定的;当前索引右边的所有元素都是待排序的,而排序的过程就是逐渐将索引右边的无序的元素按照自己制定的排序规则插入到索引左边的有序的元素中,当索引到达数组的右端时,数组的排序就完成了。在算法第四版中给出的所有排序均是适用于任意实现了Comparable接口的数据类型,若要将数字作为测试用例,请勿使用基原创 2015-07-22 17:01:07 · 957 阅读 · 0 评论 -
算法(第四版)学习笔记之java实现希尔排序
希尔排序思想:使数组中任意间隔为h的元素都是有序的。原创 2015-07-23 17:00:03 · 1012 阅读 · 0 评论 -
算法(第四版)学习笔记之java实现归并排序
归并排序思想:将一个数组分成两部分分别排序(使用递归),然后将结果合并起来,即将最后两个有序的数组归并成一个更大的有序数组。时间复杂度O(n) = NlogN归并排序最吸引人的性质是它能保证将任意长度为N的数组排序所需时间和NlogN成正比,而缺点便是它所需的额外空间和N成正比。归并排序又分为自顶向下的排序方式和自底向上的排序方式:自顶向下的排序方式是利用了分治的思想,将一个大问题原创 2015-07-24 18:43:33 · 1211 阅读 · 0 评论 -
PAT-01-复杂度2 Maximum Subsequence Sum
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 continuo原创 2015-09-02 11:21:48 · 539 阅读 · 0 评论 -
PAT-01-复杂度1 最大子列和问题
给定K个整数组成的序列{ N1, N2, ..., NK },“连续子列”被定义为{ Ni, Ni+1, ..., Nj },其中 1≤i≤j≤K。“最大子列和”则被定义为所有连续子列元素的和中最大者。例如给定序列{ -2, 11, -4, 13, -5, -2 },其连续子列{ 11, -4, 13 }有最大的和20。现要求你编写程序,计算给定整数原创 2015-09-02 11:18:49 · 761 阅读 · 0 评论 -
算法(第四版)学习笔记之java实现二叉查找树
二叉查找树:是一棵二叉树,其中每个结点都含有一个键以及相关联的一个值且每个结点的键都大于其左子树中的任意结点的键而小于其右子树中的任意结点的键。二叉查找树的每个方法功能原理都在代码中有详细的解释,下面来看代码:/** * * @author seabear * 二叉查找树 * @param * @param */public class BTS,Value> {原创 2015-07-29 15:03:02 · 1243 阅读 · 3 评论 -
算法(第四版)学习笔记之二分查找的递归与非递归java实现
二分查找是基于有序数组的,在查找时,我们先将被查找的键和子数组的中间键比较。如果被查找的键小于中间键,我们就在左子数组中继续查找;如果被查找的键大于中间键,我们就在右子数组中继续查找。在下面的代码中,将使用二分查找来获取元素和添加新元素同时插入在正确的位置中,代码如下:/** * * @author seabear * 二分查找:递归及非递归 * @param * @param原创 2015-07-29 14:09:05 · 1007 阅读 · 0 评论 -
算法(第四版)学习笔记之java实现快速排序
快速排序是一种分治的排序算法。它将一个数组分成两个子数组,将两部分独立地排序。快速排序和归并排序是互补的,归并排序将两个子数组分别排序,并将有序的子数组归并以将整个数组排序;而快速排序则是当两个子数组有序时整个数组也就自然有序了。在快速排序中,切分的位置取决于数组的内容。优点:1.实现简单;2.适用于各种不同的输入数据且在一般应用中比其他排序算法都要快得多;3.原地排序;4.时原创 2015-07-25 11:45:25 · 1164 阅读 · 0 评论 -
lintcode之Minimum Subarray
problem:Given an array of integers, find the subarray with smallest sum.Return the sum of the subarray.NoteThe subarray should contain at least one integer.ExampleFor [1, -原创 2014-11-25 20:44:18 · 722 阅读 · 0 评论 -
蓝桥杯javaB组试题之Fibonacci数列求余问题
问题描述Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1。当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少。输入格式输入包含一个整数n。输出格式输出一行,包含一个整数,表示Fn除以10007的余数。数据规模与约定1 解题思路:(A+B) Mod原创 2015-01-09 11:03:01 · 1167 阅读 · 0 评论 -
lintcode之Merge Sorted Array
Merge two given sorted integer array A and B into a new sorted integer array.样例A=[1,2,3,4]B=[2,4,5,6]return [1,2,2,3,4,4,5,6]思路很简单,就是将两个数组中的数移动到一个数组中进行排序,如有更好的方法,请在下面回帖,谢谢指点!!代码如下:原创 2014-12-03 15:37:48 · 755 阅读 · 0 评论 -
蓝桥杯历届试题之兰顿蚂蚁
问题描述兰顿蚂蚁,是于1986年,由克里斯·兰顿提出来的,属于细胞自动机的一种。 平面上的正方形格子被填上黑色或白色。在其中一格正方形内有一只“蚂蚁”。 蚂蚁的头部朝向为:上下左右其中一方。 蚂蚁的移动规则十分简单: 若蚂蚁在黑格,右转90度,将该格改为白格,并向前移一格; 若蚂蚁在白格,左转90度,将该格改为黑格,并向前移一格。 规原创 2015-05-06 23:15:33 · 664 阅读 · 0 评论 -
蓝桥杯历届试题之回文数字
问题描述 观察数字:12321,123321 都有一个共同的特征,无论从左到右读还是从右向左读,都是相同的。这样的数字叫做:回文数字。 本题要求你找到一些5位或6位的十进制数字。满足如下要求: 该数字的各个数位之和等于输入的整数。输入格式 一个正整数 n (10输出格式 若干行,每行包含一个满足要求的5位或6位整数。 数字按从小到原创 2015-05-06 23:20:18 · 546 阅读 · 0 评论 -
蓝桥杯历届试题之数字游戏
问题描述 栋栋正在和同学们玩一个数字游戏。 游戏的规则是这样的:栋栋和同学们一共n个人围坐在一圈。栋栋首先说出数字1。接下来,坐在栋栋左手边的同学要说下一个数字2。再下面的一个同学要从上一个同学说的数字往下数两个数说出来,也就是说4。下一个同学要往下数三个数,说7。依次类推。 为了使数字不至于太大,栋栋和同学们约定,当在心中数到 k-1 时,下一个数字从0开始数。例如原创 2015-05-06 23:28:50 · 924 阅读 · 0 评论 -
算法(第四版)学习笔记之java实现堆排序
继上一篇实现基于堆的优先队列后,这次将利用上一次完成的基于堆的能够重复删除最大元素操作的优先队列来实现一种经典而优雅的排序算法,称之为堆排序。堆排序可分为两个阶段:1.构建堆:在堆的构建过程中,我们将原始数组重新组织安排进一个堆中;2.下沉排序:从堆中按递减顺序取出所有元素并得到排序结果具体的思想在下面的代码中有较为详细的注释:/** * * @author seabea原创 2015-07-26 16:02:37 · 1822 阅读 · 0 评论 -
算法(第四版)学习笔记之java实现基于堆的优先队列
一台电脑之所以能同时运行多个应用程序的时候,是通过为每个应用程序的事件分配一个优先级,并总是处理下一个优先级最高的事件来实现的。在这种情况下,一个合适的数据结构应该支持两种操作:删除最大元素和插入元素。我们称这种数据类型叫做优先队列。优先队列是一种抽象数据类型,它表示了一组值和对这些值的操作,其中最重要的操作就是删除最大元素和插入元素。数据结构二叉堆能够很好地实现优先队列的基本操作。在二叉原创 2015-07-25 17:49:36 · 1573 阅读 · 0 评论 -
算法(第四版)学习笔记之归并排序的优化
在之前的文章中记录过归并排序的笔记,只是学习了基本的排序原理,并未对归并排序有更加深入的了解,现在重新回过头来仔细研究了一下归并排序的算法优化。归并排序的优点在于我们只需要比遍历整个数组多个对数因子的时间就能将一个庞大的数组排序,即对于长度为N的任意数组,自顶向下的归并排序(之前的文章中有自顶向上和自底向上两种归并排序的写法)需要1/2NlgN至NlgN次比较次数,最多需要访问数组6NlgN次。那原创 2015-09-08 09:40:22 · 3874 阅读 · 0 评论