代码改变世界

随笔分类 -  算法与数据结构

找最大的重叠区间

2011-09-27 15:52 by chonghui1001, 360 阅读, 收藏,
摘要: Description: 请编写程序,找出下面“输入数据及格式”中所描述的输入数据文件中最大重叠区间的大小。思路: 1.快排 2.查找遍历 阅读全文

最长递增子序列

2011-09-27 14:28 by chonghui1001, 197 阅读, 收藏,
摘要: 这又是一个动态规划的问题,可以使用一个数组保存长度为n的子序列的最小的值int *len = (int *)malloc(sizeof(int) *n);if (!len) { printf("out of sapce\n"); exit(-1); } len[0] = a[0]; count = 1; for (i = 1; i < n; i++) { for (j = 0; j < count; j++) { if (a[i] <= len[j]) { break; } } if (j == count) { len[count... 阅读全文

找出数组唯一重复的元素

2011-09-27 10:26 by chonghui1001, 284 阅读, 收藏,
摘要: Description: 1-1000放在含有1001个元素的数组中,只有唯一的一个元素值重复,其它均只出现一次.最基本的解法就是sum - (1 + 2 + …… + 1000),不过由于问题的特殊性下标和数组中元素值的联系关系可以使用以下的解法 index = array[len - 1] - 1; while (1) { if (array[index] < 0) break; array[index] *= -1; index = array[index] *(-1) - 1; }这个其实可以转换为一个链表的形式,在编程中用到的也很多,但是没有想到编程的术语来... 阅读全文

LCS

2011-09-26 21:09 by chonghui1001, 216 阅读, 收藏,
摘要: 求最长公共字串问题LCS 动态规划求解LCS问题,这类问题可以分为两种第一为子串必须连续,第二种子串不连续。 本质上我觉得没有区别,都是动态规划的问题。用空间换取时间,应用较多。 阅读全文

给定一个集合和一个数找出比这个数大的最小的数

2011-09-25 19:14 by chonghui1001, 982 阅读, 收藏,
摘要: description: 给定一个集合A=[0,1,3,8](该集合中的元素都是在0,9之间的数字,但未必全部包含),指定任意一个正整数K,请用A中的元素组成一个大于K的最小正整数。思路: 1.将数组A排序. 2.生成一个十个数的数组B,B[i]中的每一个的元素都是A中比i大的最小的元素,如果不在A中则用A中所组合而成的最小的两位数代替,比如上例则生成B[]={1, 3, 3, 8, 8, 8, 8, 8, 10, 10} 3.从给定的数最高位开始找到第一不在A中的位数i的权值m, 从第i位开始到最高位找到第一个权值m,B[m] != max(A中组合而成的最小的两位数), 剩下的位都... 阅读全文

二叉树上任意两个节点的最近公共父节点

2011-09-24 22:03 by chonghui1001, 619 阅读, 收藏,
摘要: 这个问题有LCA算法但是我还是使用的是递归的解法,后序遍历static bool lca(node *root, int va, int vb, node *&result, node *parent){ int left, right, mid; left = right = mid = 0; //判断左右子树是否有要寻找的节点 if (root->left) left = lca(root->left, va, vb, result, root); if (root->right) right = lca(root->right, va, vb, resul 阅读全文

平面上N个点求斜率最大的两个点

2011-09-24 20:01 by chonghui1001, 594 阅读, 收藏,
摘要: 平面上N个点求斜率最大两个点1.根据X将N个点排序2.最大的斜率为max(p[i], p[i+1])可以证明如果有ABC三个点则AB与BC的斜率一个大于AC另一个则小于AC, k3 = (c - b)/(c - a)k2 + (b -a)/(c-a)k1;通过反正法可以证明k3在k1和k2之间p[i], p[i + k]斜率在(p[i ], p[i + 1]) 和(p[i + 1] , p[i + k])之间,然后递归推出最大的斜率为max(p[i], p[i + 1]); 阅读全文