归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个有序的子序列,再把有序的子序列合并为整体有序序列。
例如有两个有序表:(7,10,13,15)和(4,8,19,20),归并后得到的有序表为:(4,7,8,10,13,15,19,20)。
代码:
#include
using namespace std;
void mergearra...
分类:
其他好文 时间:
2014-08-01 16:10:31
阅读次数:
145
动态规划法求最长递增子序列的两种方法,一个是n²,一个是nlgn时间的。...
分类:
其他好文 时间:
2014-08-01 16:03:51
阅读次数:
201
归并排序Merging Sort,将两个或两个以上的有序表组合成一个新表。1.基本思想假设初始化系列含有n个记录,则可以看出n个有序的子序列,每一个子序列的长为1,然后两两归并,得到【n/2】个长度为1或2的子序列,再两两归并……如此重复,知道最后得到一个长度为n的有序序列位置,这种排序方法称为2-...
分类:
其他好文 时间:
2014-08-01 15:43:41
阅读次数:
208
有一个比较容易出错的点:反转求最长公共子序列,这是错误的想法 1 class Solution { 2 public: 3 string longestPalindrome(string s) { 4 int n = s.length(); 5 int lon...
分类:
其他好文 时间:
2014-08-01 15:28:31
阅读次数:
214
本文部分参考Discuss: LeetCode.步骤1. 选择数组的中间元素. 最大子序列有两种可能: 包含此元素/不包含.步骤2. 步骤2.1 如果最大子序列不包含中间元素, 就对左右子序列进行步骤1. 步骤2.2 如果最大子序列包含, 则结果很简单, 就是左子列的最大后缀子列(即包含左子列最.....
分类:
其他好文 时间:
2014-07-31 19:47:57
阅读次数:
152
快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序n个项目要O(nlogn)次比较。在最坏状况下则需要O(n2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他O(nlogn)算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来。
此种排序的思路是:如果在分开的时候,不是从中间位置上分界,二是按照元素的大小分开为两个一大一小的子序列(一个子序列的所有元素大于另一个子序列里的所有元素),这样的话,因为两个子序列之间的相对次序已经正确,所有在合并的时候...
分类:
其他好文 时间:
2014-07-31 16:58:07
阅读次数:
299
求最短公共祖先,是最长公共子序列的变形。在DP的同时记录下路径,然后递归回去输出即可。如果碰到公共的,只输出一次。以第一个样例为例:图中数字是最大公共子段的长度,下标代表路径。带下划线的是递归时所走的路径。 1 //#define LOCAL 2 #include 3 #include 4 #i.....
分类:
其他好文 时间:
2014-07-31 16:02:46
阅读次数:
232
题意:k份书稿分成m份,使得每份的和最小
思路:典型最大值最小化问题,使用贪心+二分。贪心的是每次尽量将元素往右边划分,二分查找最小的x满足m个连续的子序列和S(i)都不超过x。
因为输出的原因,在划分时就从后往前尽量划分。
#include
#include
#include
#include
using namespace std;
typedef long ...
分类:
其他好文 时间:
2014-07-31 13:29:27
阅读次数:
178
HDU 1160 FatMouse's Speed (动规+最长递减子序列)...
分类:
其他好文 时间:
2014-07-31 00:04:08
阅读次数:
270
题目:编辑距离,给你两个串,将已知串转化成目标串,可以增、删、改字母,求最小操作次数。
分析:dp,编辑距离。同最大公共子序列。注意操作位置是实时变化的。(前面都已经处理好了)
f[i][j] = f[i-1][j] 这时删掉 str1[j+1];
f[i][j] = f[i][j-1]...
分类:
其他好文 时间:
2014-07-31 00:02:25
阅读次数:
282