算法积累
文章平均质量分 76
个人算法积累,部分算法学习于《程序员代码面试指南》,预计包括排序算法、栈和队列、链表问题、二叉树、递归和动态规划、字符串问题、大数据和空间限制、数组和矩阵问题等。所有代码都经测试通过,全部代码可通过个人github.zxiaofan.com下载。
Z小繁
这个作者很懒,什么都没留下…
展开
-
用栈来求解汉诺塔变形问题
/** * 用栈来求解汉诺塔问题:HanoiStack【3】 * * 【问题描述】:将汉诺塔游戏(小压大)规则修改,不能从左(右)侧的塔直接移到右(左)侧,而是必须经过中间塔。 * * 求当塔有N层时,打印最优移动过程和最优移动步数。如N=2,记上层塔为1,下层为2.则打印:1:left->mid;1 * * 由于必须经过中间,实际动作只有4个:左L->中M,中->左,中->右R,右->中。 * * 原则:①小压大;②相邻不可逆(上一步是L->M,下一步绝不能是M->L) *原创 2016-01-09 23:54:39 · 1946 阅读 · 0 评论 -
由两个栈组成的队列
/** * 由两个栈组成的队列:TwoStackQueue【2】 * * 【编写一个类,用两个栈实现队列,支持队列的基本操作(add、poll、peek)】 * * 设计思路:栈-先进后出,队列-先进先出。用两个栈把顺序反过来。 * * stackPush只管进栈,stackPop只管出栈且【仅当】其为空时,将stackPush的元素【全部】转移到stackPop。原创 2016-01-09 23:51:45 · 1844 阅读 · 0 评论 -
设计一个有getMin功能的栈
* 设计一个有getMin功能的栈:StackGetMin【1】. * * 【实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作】 * * 要求:1、pop、push、getMin操作的时间复杂度都是原创 2016-01-09 23:45:02 · 2317 阅读 · 0 评论 -
仅用递归函数和栈逆序一个栈
package stackAndQueue;import java.util.Stack;import org.junit.Test;/** * 仅用递归函数和栈逆序一个栈:ReverseStack【2】 * * 【一个栈依次压入1、2、3,将栈转置,使栈顶到栈底依次是1、2、3,只能用递归函数,不能借用额外的数据结构包括栈】 * * 算法思想:两个递归函数(getAnd原创 2016-01-09 23:40:53 · 3167 阅读 · 0 评论 -
归并排序MergeSort
归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。值得注意的是归并排序是一种稳定的排序方法。速度仅次于快速排序,为稳定排序算法,一般用于总体无序,但是各子项相对有序的数列。若将两个有序表合并成一个有序表,称为二路归并。1、算法思想 比较a[i]和a[j]的大小,若a[i]≤a[j],则将第一个有原创 2016-01-05 00:18:30 · 2241 阅读 · 0 评论 -
快排QuickSort
1、算法思想:/** * 一趟快速排序的算法是: 1)、设置两个变量I、J,排序开始的时候I:=1,J:=N; * * 2)以第一个数组元素作为关键数据,赋值给X,即X:=A[1]; * * 3)、从J开始向前搜索,即由后开始向前搜索(J:=J-1),找到第一个小于X的值,两者交换; * * 4)、从I开始向后原创 2016-01-05 00:15:47 · 2307 阅读 · 0 评论 -
冒泡排序BubbleSort
冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。1、算法思想1、比较相邻的元素。如果第一个比第二个大,就交换他们两个。2、对每一对相邻元素作同样的工原创 2016-01-05 00:12:35 · 1931 阅读 · 0 评论 -
堆排HeapSort
堆排序是一种树形选择排序,是对直接选择排序的有效改进。堆的构建--》堆排:初始状态-从最后一个结点开始,使该子树成堆(最小/大的数移到根节点),不断循环>-初始堆(小/大顶)--输出堆顶元素(堆顶与堆的最后一个元素交换位置)--最后一个数移至堆顶--重新建堆--输出堆顶元素以下为《数据结构(C++版)习题解答与实验指导》实例原创 2016-01-05 00:06:58 · 2537 阅读 · 0 评论 -
简单选择排序SimpleSelectSort
冒泡排序:在每一次比较的时候,如果发现相邻两数的次序不对,都会马上就把两数进行对调。选择排序:则在比较过程中(内循环里面)并不进行对调,而是先记录下最小(大)数的下标,在一次扫描完成后再进行对调。 1、算法思想 在要排序的一组数中,选出最小(或者最大)的一个数与第 i(i=0)个位置的数交换;然后在剩下的数当中再找最小(或者最大)的与第i+1个位置的数交换原创 2016-01-04 23:53:30 · 1672 阅读 · 0 评论 -
希尔排序ShellSort
希尔排序(Shell Sort)是一种插入排序算法,因D.L.Shell于1959年提出而得名。Shell排序又称作缩小增量排序。1、算法思想 先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组。所有距离为dl的倍数的记录放在同一个组中。先在各组内进行直接插入排序;然后,取第二个增量d21重复上述的分组和排序,直至所取的增量d t=1(d原创 2016-01-04 23:47:24 · 1996 阅读 · 0 评论 -
直接插入排序StraightInsertSort
1、算法思想 将一个记录插入到已排序好的有序表中,从而得到一个新的记录数增1的有序表。 即:先将序列的第1个记录看成是一个有序的子序列,然后从第2个记录逐个进行插入,直至整个序列有序为止。要点:设立哨兵,作为临时存储和判断数组边界之用。2、代码实现package sort;public class St原创 2016-01-04 23:43:28 · 1786 阅读 · 0 评论 -
排序算法笔记说明
排序算法相关内容是个人理解并代码实现的常用的内部排序算法,目前包括如下七大算法(暂不包括基数排序):直接插入排序、希尔排序、简单选择、堆排、冒泡、快排、归并排序。相关内容最初写在自己的云笔记上,现发表于博客,希望和大家多多交流。在写这些内容之时,也借鉴了一些前辈的文章,每个算法都自我实现了。本人也算不上大神,如有纰漏,望交流指正,共同进步。相关代码都可以直接从本人github上阅读下载原创 2016-01-04 23:35:59 · 1737 阅读 · 0 评论 -
蓝桥杯-算法训练51-Torry的困惑(基本型)
今天做这道题最初以为会用到什么数学公式,在思考后发现自己想多了。思路主要两个:1. 生成一个质数表,再按要求求值(本文就按此方法);2.从小取到大,判断是否是质数,如果是就相乘,并构建计数器判断是否达到n个。算法训练 Torry的困惑(基本型) 时间限制:1.0s 内存限制:512.0MB问题描述 Torry从小喜爱数学。一天,老师告诉他,像2、3、原创 2015-04-06 22:38:06 · 3297 阅读 · 0 评论 -
蓝桥杯-算法训练2 最大最小公倍数
刚做了,蓝桥杯算法训练的最大最小公倍数一题,感觉考查的是数学了,哈哈。时间限制:1.0s 内存限制:256.0MB问题描述已知一个正整数N,问从1~N中任选出三个数,他们的最小公倍数最大可以为多少。输入格式输入一个正整数N。输出格式输出一个整数,表示你找到的最小公倍数。样例输入9样例输出504数据规模与约定1 思路如下:1. n是原创 2015-04-06 15:14:40 · 3123 阅读 · 0 评论 -
蓝桥杯-基础练习12 十六进制转八进制
基础练习 十六进制转八进制 问题描述 给定n个十六进制正整数,输出它们对应的八进制数。 输入格式 输入的第一行为一个正整数n (1<=n<=10)。 接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。 输出格式 输出n行,每行为输入对应的八进制正整数。 注意 输入的十六进制数不会有前导0,比如012A。 输原创 2015-04-05 16:59:31 · 4389 阅读 · 2 评论