数据结构
文章平均质量分 75
二姐不想去实验室
程序媛一枚,哈哈~~~~~
展开
-
最短路径算法—Floyd(弗洛伊德)算法
Floyd算法(解决任意两点间的最短路径,可以正确处理有向图或负权值的最短路径问题): 时间复杂度O(N3),空间复杂度O(N2); 算法思想: Floyd算法是一个经典的动态规划算法;首先我们的目标是计算顶点i到j的最短路径,从动态规划角度来看: 从节点i到节点j的最短路径不外乎两种可能:1) 直接从i到j; 2) i经过若干节点再到j;所以我们可以这样来计算i j之间的最短距离:对于原创 2015-08-30 10:32:47 · 2030 阅读 · 0 评论 -
将字符串中的字符'*'移到串的前部分,保证非*字符的顺序位置不能变
题目: 编写字符串处理函数,将字符串中的字符'*'移到串的前部分,前面的非'*'字符后移,但不能改变非'*'字符的先后顺序,函数返回串中字符'*'的数量。如原始串为:ab**cd**e*12,处理后为*****abcde12,函数并返回值为5。(要求使用尽量少的时间和辅助空间)原创 2015-09-17 22:58:27 · 2781 阅读 · 0 评论 -
判断s3字符串是否由s1和s2交错组成
给定一个字符串,判断该字符串能否由另外两个字符串交错组成。 bool IsCross(char* a, char* b, char* aim) { int len1 = strlen(a); int len2 = strlen(b); int len3 = strlen(aim); if (len3 != (len1 + len2)) return false; bool **d原创 2015-09-26 20:39:27 · 1191 阅读 · 1 评论 -
数组之—重复数字
题目一: 在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是重复的数字2或者3。 法一:利用hash数组来求解 定义一个hash[n]={0}; 遍历数组,若hash[num原创 2015-09-28 10:51:17 · 351 阅读 · 0 评论 -
有关字符串的全排列,组合 等问题
题目描述 输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 结果请按字母顺序输出。 输入描述: 输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。 下面的代码提交不了,啊啊啊,怎么改呀~~~~ void swap(char& a,原创 2015-09-28 21:01:58 · 475 阅读 · 0 评论 -
求最大差值
有一个长为n的数组A,求满足0≤a≤b 给定数组A及它的大小n,请返回最大差值。 测试样例: [10,5],2 返回:0 int getDis(vector A, int n) { // write code here int size=A.size(); if(size<=1 || n<=1)原创 2015-10-06 23:10:26 · 462 阅读 · 0 评论 -
二分查找
对于一个有序数组,我们通常采用二分查找的方式来定位某一元素,请编写二分查找的算法,在数组中查找指定元素。 给定一个整数数组A及它的大小n,同时给定要查找的元素val,请返回它在数组中的位置(从0开始),若不存在该元素,返回-1。若该元素出现多次,请返回第一次出现的位置。 测试样例: [1,3,5,7,9],5,3 返回:1 class BinarySearch { pub原创 2015-10-09 22:22:20 · 648 阅读 · 0 评论 -
删除链表中(不带头结点)值为value的结点,返回删除的个数
滴滴一面题目:删除链表中(不带头结点)值为value的结点,返回删除的个数 //删除链表中某个元素(不带头结点) typedef struct LinkNode { int val; LinkNode* next; }*LinkList; void CreateList(int* a, int n, LinkList head) { LinkList p = head;原创 2015-10-21 21:13:37 · 741 阅读 · 0 评论 -
二叉树的各种遍历(递归、非递归)
创建二叉树 前序遍历 递归与非递归 中序遍历 递归与非递归 后序遍历 递归与非递归原创 2015-09-29 21:32:42 · 777 阅读 · 0 评论 -
排序算法
一:冒泡排序 void MaoPaoSort(int *a, int len) { bool flag = true; for (int i = 1; i < len; ++i) { flag = true; for (int j = 0; j < len - i; ++j) { if (a[j]>a[j + 1]) { Swap(a[j], a[j + 1原创 2015-09-03 15:03:22 · 316 阅读 · 0 评论 -
并查集算法介绍
http://blog.csdn.net/dm_vincent/article/details/7655764 非常好的一篇文章,浅显易懂!值得一看! 本文主要介绍解决动态连通性一类问题的一种算法,使用到了一种叫做并查集的数据结构,称为Union-Find。 更多的信息可以参考Algorithms 一书的Section 1.5,实际上本文也就是基于它的一篇读后感吧。 原文中转载 2015-08-29 10:34:46 · 916 阅读 · 0 评论 -
最小生成树算法—kcruscal算法
1) 开始时,MST包含n个顶点,0条边;每个点都不连通,每个点为单独的一组; 2) 将边的权值按照从小到大排列,每次选取最小的权值边加入到最小生成树中,加入的过程中要注意的地方是: 不能产生环,那么如何判断呢? 可以这样:在添加权值边, 在添加之前,我们要判断u、v是否已经连通,若是,则不能添加这条边到MST中,反之,可以添加; 那原创 2015-08-29 12:38:53 · 1356 阅读 · 0 评论 -
最短路径算法之 Dijkstra(迪杰斯特拉)算法
Dijkstra算法: 步骤: a. 初始时,S只包含源点,即S={v},v的距离为0。U包含除v外的其他顶点,即: U={其余顶点},若v与U中顶点u有边,则u的距离设置为相应的权值,若u v之间不存在边,则 设置u的距离为无穷大。 b. 从U中选取一个距离 v 最小的顶点k,把k,加入S中(该选定的距离就是v到k的最短路径长度)。 c. 以k为新考虑的中间点,原创 2015-08-30 09:53:18 · 995 阅读 · 0 评论 -
字符串移位包含问题
问题: 给定两个字符串s1和s2,要求判断s2是否能够被通过s1做循环移位(rotate)得到的字符串包含。例如,S1=AABCD和s2=CDAA,返回true;给定s1=ABCD和s2=ACBD,返回false。 三种方法: void getNext(const char* des, int* next)//KMP算法求next数组 { int len = strlen(des); n原创 2015-09-17 20:57:38 · 393 阅读 · 0 评论