Data Structure and Algorithm
文章平均质量分 81
双鱼座小韩
计算机系的帅哥啦
展开
-
算法学习 - 01 递归讨论
偶尔看到一篇博客,http://blog.csdn.net/feixiaoxing/article/details/6838362,一步一步写算法,觉得挺不错,坚持不是一件容易的事,当偶尔有空时候看看算法觉得时间还是过的挺快的,算是打算时间吧,同时也锻炼锻炼别让脑子生锈了。。。很害怕递归,莫名的,就从这里开始吧。。。首先来两个简单的例子:1. 计算从1到m的和很自然,用循环就实现啦原创 2013-10-24 16:08:36 · 1053 阅读 · 0 评论 -
面试题 - 统计字符串中字符的个数
#include #include #include #include #include using namespace std;void countSameChar(char* s, char* d){ char* p = s; char* q = s; while(*q != '\0') { if(*p == *q)原创 2015-09-08 14:53:56 · 890 阅读 · 0 评论 -
HDOJ 1106 排序
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1106Problem:输入一行数字,如果我们把这行数字中的‘5’都看成空格,那么就得到一行用空格分割的若干非负整数(可能有些整数以‘0’开头,这些头部的‘0’应该被忽略掉,除非这个整数就是由若干个‘0’组成的,这时这个整数就是0)。你的任务是:对这些分割得到的整数,依从小到大的顺序排序输出。原创 2013-06-22 17:07:24 · 1440 阅读 · 2 评论 -
杭电--1258 深度搜索(sum it up)
DFS还是不太懂,递归是个硬伤啊。。。。题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1258#include #include #include #include #include using namespace std;vector digits(13); //出现的数字vector digits_num原创 2013-06-22 23:38:29 · 1083 阅读 · 0 评论 -
杭电--1003 DP问题 max sum
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1003DP经典问题,求局部最大和:给你一个数组,在其中取任意连续多个,使其和要最大#include #include using namespace std;int main(){ int step = 1; int max; int n; cin原创 2013-06-23 16:56:50 · 1245 阅读 · 0 评论 -
编程之美 -- 寻找数组中的最大值和最小值
对于一个由N个整数组成的数组,同时找到最大值和最小值,且需要多少次比较才能着出来?看起来好像很简单,简单一遍循环可以搞掂,但是效率呢?下面是书上给出的三种方法,我用C++实现了下。。。参数:数组,数组起始下标,数组末尾元素下标返回:一个结构,包括最大值,最小值,比较的次数#include using namespace std;static int times =原创 2013-10-31 16:22:29 · 1233 阅读 · 0 评论 -
排序 -- 归并排序
归并排序 MergingSort平均、最好、最坏:O(nlogn)辅助空间:O(n) 申请了空间最大的特点:稳定的改进算法归并排序:强调要马跑得快,就得给马吃个饱,哈哈 算法思想:假设初始序列含有n个记录,则可以堪称n个有序的子序列,每个子序列的长度为1,然后两两归并,得到[n / 2]个长度为2或者1的有序子序列;再两两归并,重复,直到得到一个长度为n的有序序列为止。原创 2013-11-03 15:48:44 · 868 阅读 · 0 评论 -
排序 -- 总结
首先,来个简单分类:交换排序类:冒泡排序,快速排序选择排序类:简单选择排序,堆排序插入排序类:直接插入排序,希尔排序归并排序类:归并排序再来个整体概览:从整体上看:简单算法:冒泡,简单选择,直接插入改进算法:快速排序,堆排序,希尔排序,归并排序很显然,改进算法普遍性能上比简单的要好。从平均情况看,快速排序,堆排序,归并排序要比希尔排序更有原创 2013-11-03 16:34:31 · 1025 阅读 · 0 评论 -
排序 -- 堆排序
堆排序 HeapSort基于简单选择排序算法,属于选择排序类算法属于:改进算法平均:O(nlogn) 最好:O(nlogn) 最坏:O(nlogn)稳定性:不稳定辅助空间:O(1) 数据结构:堆(其实就是一种特殊的完全二叉树),可以利用数组实现这棵树大顶堆:每个结点的值都大于或等于其左右孩子结点的值小顶堆:每个结点的值都小于或等于其左右孩原创 2013-11-03 11:43:45 · 898 阅读 · 0 评论 -
排序 -- 快速排序
快速排序 QuickSort -- 分治法策略 + 递归实现平均:O(nlogn)最好:O(nlogn)最坏:O(n*n)辅助空间:O(logn) ~ O(n) 稳定性:不稳定不属于简单类型算法,属于改进的算法快排像情绪化的天才,心情好时候表现很好,碰到糟糕时候变的差强人意快速排序对空间有一定的要求:快排属于:交换排序类,实际上是冒泡排序的升级版,它的原创 2013-10-26 17:55:09 · 916 阅读 · 0 评论 -
编程之美 -- 中国象棋将帅问题
下过中国象棋的朋友都知道,双方的“将”和“帅”相隔遥远,并且它们不能照面。在象棋残局中,许多高手能利用这一规则走出精妙的杀招。假设棋盘上只有“将”和“帅”二子(为了下面叙述方便,我们约定用A表示“将”,而B则表示“帅”):A、B二子被限制在己方3×3的格子(横向与纵向分别有三个可以运动到的位置)里运动。例如,在如上的表格里,A被正方形{d10,f10,d8,f8}所包围,而B被正方原创 2013-10-28 10:45:19 · 1520 阅读 · 0 评论 -
排序 -- 希尔排序
希尔排序基本思想:基于直接插入排序的思想,将相距某个增量的记录组成一个子序列,保证在子序列内分别进行直接插入排序后得到的结果是基本有序而不是局部有序,时间复杂度为O(logn) ~ O(n*n) 之间,不稳定;属于改进算法,效率胜过三个简单算法;#include #include #include #include #include原创 2013-03-28 20:51:14 · 1030 阅读 · 0 评论 -
排序 -- 简单选择排序
选择排序思想:每一趟 n-i+1(i=1,2,3...n-1)个记录中选择关键字最小的记录作为有序序列的第i个记录简单选择排序:通过n-i次关键字间的比较,从n-i+1个记录中选出关键字最小的记录,和第i(i是1到n之间)个记录交换简单算法,复杂度为O(n) = n*n,性能上稍稍优于冒泡,稳定的,基于比较的算法代码如下:#include #define OK 1原创 2013-03-17 22:31:42 · 1547 阅读 · 0 评论 -
排序 -- 直接插入排序
#include #include #include #include #include #include #define OK 1#define ERROR 0#define TRUE 1#define FALSE 0#define MAX_LENGTH_INSERT_SORT 7 /* 用于快速排序时判断是否选用插入排序阙值 */typede原创 2013-03-28 11:30:54 · 1013 阅读 · 0 评论 -
排序 -- 冒泡排序
内排序:排序过程中待排序的记录全部被放置内存中稳定的排序:假设关键字ki = kj,排序前后ri 与rj的大小关系还是保持一致的简单排序:冒泡排序、简单选择排序、直接插入排序改进算法:希尔排序、堆排序、归并排序、快速排序下面是冒泡排序代码:冒泡属于内排序,稳定的简单的,一种基于交换的排序,效率比较低,O(n)=n*n思想:两两比较相邻的记录的关键字,如果反序则交换,直到原创 2012-11-26 21:58:38 · 642 阅读 · 0 评论 -
算法学习 - 02 查找算法总结
查找,应该是最常用的算法之一了吧,当然还有排序,其实,查找是建立在排序基础上的,除了那个最笨的顺序查找。。。1. 好吧,首先来个最简单的顺序查找,原理很简单,顺序比较每个元素,直到找到关键字为止上代码咯。。。//顺序查找:返回待查找关键字的索引(从0开始),数组存储数据int find_seq(int *a, int len, int value){ if(a原创 2013-10-25 16:42:36 · 902 阅读 · 0 评论 -
一道面试题,考了我两次,两次都不会T_T
这道题记忆犹新啊,校招期间,被两家公司都问了,深信服和百度!!!坑爹。。。题目很简单:如何检查一个单链表上是否有环?首先,既然是单链表,如果有环,就肯定是在链表末尾位置。来一张木有环的正常单链表,看图。。。好吧,再来一张有环的。。。1. 首先想到的办法当然是把地址保存起来,然后遍历,重复出现的时候就表示此链有环,保存可以用哈希表,时间复杂度是O(n)原创 2013-10-24 23:24:03 · 832 阅读 · 0 评论 -
一道很有意思的题目,计算sum
原文来自:http://zhedahht.blog.163.com/blog/static/2541117420072915131422/我稍微整理了下:题目是这样的:计算从1加到n,sum = 1+2+3+...+n,不能用乘除法,for,while,if,else,switch,case等以及条件判断和?:操作符经过对文章以及评论的分析,得出如下的一些解法,很有意思,不在于这道题,原创 2013-10-25 11:00:06 · 939 阅读 · 0 评论 -
面试题 - 字符串逆序
#include #include #include using namespace std;void reverseWord(char* word){ char* p = word; while(*p != '\0') { p++; } --p; while(p > word) { *p =原创 2015-09-08 14:15:13 · 565 阅读 · 0 评论