- 博客(6)
- 收藏
- 关注
转载 Longest Increasing Subsequence
解法一: DP int lis( int arr[], int n ) { int *lis, i, j, max = 0; lis = (int*) malloc ( sizeof( int ) * n ); /* Initialize LIS values for all indexes */ for ( i = 0; i < n; i++ ) li
2014-09-27 13:03:30
250
转载 怎样通过0.5概率的随机函数实现任意概率的随机函数
给定一个随机函数可以按照0.5的概率返回true, 要求实现一个函数返回任意概率的true bool helper(){...} bool prob(double p, bool exp){ if(p return prob(1-p, !exp); if(helper() == exp) return exp; else return prob((p-0.5)*2, exp);
2013-07-17 10:49:49
1044
1
原创 n!末尾含0的个数
编程之美上的一道题 int containZero(int n){ int count = 0; /* 方法一: 遍历 1~n 求每个数能拆成多少个5 并相加 while(n > 0){ int m = n; n--; while(m % 5 == 0 && m > 0){ m = m/5;
2013-07-09 00:57:45
403
转载 01背包
有N个物品 价值为Wi( i = 1...N) 容量为V的背包 物品每次只能取一次(0,1) , 怎么取 使背包中的价值最大 假设 f[i][v] 表示为 前i个物品 在容量为v的价值 则f[i][v] = max(f[i-1][v], f[i-1][v-c[i]] + w[i]) 第一项表示不取第i个物品, 第二项表示取第i 个物品, 然后两者选大者 int c[7] =
2013-05-08 22:04:14
320
转载 一个无序数组中第K大的元素
int partition(int *arr, int n){ int index = rand()%n; swap(arr[index], arr[n-1]); int i = 0; int j = 0; for(;j < n; j++) { if(arr[j] < arr[n-1]){ swap(arr[i
2013-05-03 02:49:17
562
原创 1到n的数组中找出duplicates
从一个1到n的数组中找出重复的元素 空间复杂度为O(1), 时间复杂度O(n) 第一种是将每个数组中的元素放到它对应的位置中去 比如 a[1] = 6, a[6] 如果不是6 则 继续取出a[6] 中的值 继续比较. 如果a[6] 等于6 则说明值重复了 打印该值 并将 该值+n. 扫描一遍数组即可 第二种 将扫描到的数 变为负数 如果下一次在扫描到 说明重复了 void dup1(in
2013-04-30 21:30:15
357
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人