- 博客(11)
- 资源 (1)
- 收藏
- 关注
转载 字符串中连续出现最长子串
一,考虑边界问题。二,实现优化笛卡尔积组合,总体我是这样想的:就是纵向切出字符串的连续组合集合,在横向一对一跳跃比较集合元素。例如:abcbcabc 一,纵向切:得到所有字符串组合,注意:这里要求的是最多连续子字符串,其实就是优化笛卡尔积的原则,也是边界。 字符串共8位,以子串的长度为1,从字符串第一位开始切,且称为切:1----从a开始切:(字符串为abcbcab
2012-08-16 09:38:51
594
转载 Random Select Problem(数组中前k大数问题)
所谓“第(前)k大数问题”指的是在长度为n(n>=k)的乱序数组中S找出从大到小顺序的第(前)k个数的问题。 转自(http://www.cppblog.com/superKiki/archive/2011/04/10/143858.html)解法1:我们可以对这个乱序数组按照从大到小先行排序,然后取出前k大,总的时间复杂度为O(n*logn+k)。 解法2:利用选择排序或交互排序
2012-05-05 20:32:30
688
转载 挺简洁的一个快排, 递归及非递归
主要说下非递归的思路吧,就是把每次 p = partition(a, low, high) 的结果 low , p-1 , p+1, high都压栈#include "stdafx.h"#include #include #define MAX_SIZE 10using namespace std; typedef int elem;
2012-05-03 16:50:48
474
转载 动态规划 (Dynamic Programming) 之 最长递增子序列(Longest Increase Subsequence)
既然已经说到了最长公共子序列,就把这个递增子序列也说了。同样的,这里subsequence表明了这样的子序列不要求是连续的。比如说有子序列{1, 9, 3, 8, 11, 4, 5, 6, 4, 19, 7, 1, 7 }这样一个字符串的的最长递增子序列就是{1,3,4,5,6,7}或者{1,3,4,5,6,19}。其实这个问题和前面的最长公共子序列问题还是有一定的关联的。假设我们的初始的
2012-04-28 15:44:33
462
原创 二分查找错误事例分析
#include int search(int array[], int n, int v){ int left, right, middle; left = 0, right = n; while (left < right) { middle = (left + right) / 2; if (array[midd
2011-10-24 16:45:12
672
转载 单链表寻找环的入口点
若存在环,如何找到环的入口点(即上图中的结点E)?解答: 如图中所示,设链起点到环入口点间的距离为x,环入口点到问题1中fast与low重合点的距离为y,又设在fast与low重合时fast已绕环n周(n>0),且此时low移动总长度为s,则fast移动总长度为2s,环的长度为r。则s + nr = 2s,n>0 ①s = x + y
2011-10-23 14:29:43
391
原创 单链表的快速排序
方法一:单链表的快速排序和数组的快速排序在基本细想上是一致的,以从小到大来排序单链表为例,都是选择一个支点,然后把小于支点的元素放到左边,把大于支点的元素放到右边。但是,由于单链表不能像数组那样随机存储,和数组的快排序相比较,还是有一些需要注意的细节:1. 支点的选取,由于不能随机访问第K个元素,因此每次选择支点时可以取待排序那部分链表的头指针。2. 遍历量表方式,由于不能从单链表的末尾向前遍历,
2011-10-22 22:35:05
374
原创 基数排序
主要步骤: 分配、 收集,然后对每一位做计数排序即可#include using namespace std;void assign(int* arr, int len, int* count, int radix){ int i; for(i=0; i<len; i++) { int k=(arr[i]/radix)%10; //arr[i]/radix 取个位、十位、
2011-10-22 17:48:04
246
原创 二分查找
二分查找写对了的确不容易!!!!!试试才知道!!!难怪1946年得出的算法到1962年才有人写对。往往当程序循环能终止时可以高效的得到正确值,但程序中可能包含死循环。int BinaryDiv(int *a, int l, int h, int val){ for(; ;) { if(l > h) return -1;
2011-10-20 20:47:33
200
转载 博弈
一.巴什博奕(Bash Game):首先我们来玩一个比较古老的报数游戏。A和B一起报数,每个人每次最少报一个,最多报4个。轮流报数,看谁先报到30.如果不知道巴什博弈的可能会觉得这个是个有运气成分的问题,但是如果知道的人一定知道怎样一定可以赢。比如A先报数的话,那么B一定可以赢(这里假定B知道怎么正确的报数)B可以这样报数,每次报5-k(A)个数,其中k(A)是A报
2011-10-20 17:18:50
373
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人