摘要:
问题:写一个时间复杂度尽可能低的程序,求一个一维数组中最长递增子序列的长度。如1,-1,2,-3,4,-5,6,-7.最长递增子序列:1,2,4,6或者-1,2,4,6… 分析:我们发现2前面是1或者-1对后面没有影响。用i来遍历数组。i=0时,arr[i] = 1就一个数,这时最长递增子序列为{1},i=1时,-1<1所以对-1来说,目前最长递增子序列为{-1}为1,i= 2时,2>1,2>-1对2来说,最长递增子序列为{1,2}或{-1,2}长度为2,当i = 3时,-3小于1,-1,2.所以当前最长子序列依然是{1,2}或{-1,2}长度为2,当i= 4时,4>- 阅读全文
阅读排行榜
Programe_Of_Beauty:2.12 快速寻找满足条件的两个数
2011-06-11 23:09 by x_feng, 173 阅读, 收藏,
摘要:
问题:能否快速找出数组中两个数字,让这两个数字之和等于一个给定的值,为了简单起见,假设这个数组中肯定存在至少一组符合要求的解。解法一:用两层循环,时间复杂度为O(N*N),不可取。解法二:先用快速排序,然后从两端向中间找,时间复杂度为O(Nlog2N)。代码如下:int Partion(int* arr, int p, int r){ int temp; int i = p; int j = r; temp = arr[i]; do { while(arr[j] >= temp && i < j) { j--; } if (i < j) { arr[i++] 阅读全文
Programe_Of_Beauty:2.14 求数组的子数组之和的最大值
2011-06-12 10:09 by x_feng, 165 阅读, 收藏,
摘要:
问题:一个有N个整数元素的一维数组,那么求子数组和的最大值。分析:首先我们明确问题,子数组是联系的,不用返回元素的位置,元素是整数,可能为正,负或0。我们来看看最经典的解法:a[0],a[1]…a[N-1],用分治的思想,a[0]和a[1]…a[N-1],是什么关系呢?a[1]…a[N-1],包含两部分,1,以a[1]为开头的最大值,2,a[1]…a[N-1],有一个最大值,那么我们只要比较{a[0],a[0]+以a[1]开头的最大值,a[1]…a[N-1]之间的最大值}就可以得出结果,那么a[1]与a[2]…a[N-1]呢?也一样……a[N-2]与a[N-1]呢?代码如下:void Find 阅读全文
Programe_Of_Beauty:2.17 数组循环位移
2011-06-12 17:29 by x_feng, 159 阅读, 收藏,
摘要:
问题:把一个N个元素的数组循环右移K位,要求时间复杂度为O(N)。解析:如abcd1234右移4位 要变成1234abcd1,逆序排列abcd->dcba12342,逆序排列1234->dcba43213,逆序排列dcba4321代码如下:void Reverse(int * arr, int beg, int end){ for (; beg < end ; beg++, end—) { int temp = arr[beg]; arr[beg] = arr[end]; arr[end] = temp; }}void RightSift(int* arr, int N, i 阅读全文
转:Javascript继承机制的设计思想
2011-07-13 15:36 by x_feng, 158 阅读, 收藏,
摘要:
作者写的非常好,让人醍醐灌顶!本文转自:http://www.ruanyifeng.com/blog/2011/06/designing_ideas_of_inheritance_mechanism_in_javascript.html作者: 阮一峰日期: 2011年6月 5日我一直很难理解Javascript语言的继承机制。它没有"子类"和"父类"的概念,也没有"类"(class)和"实例"(instance)的区分,全靠一种很奇特的"原型链"(prototype chain)模式,来实现继承 阅读全文