摘要:
1、实现一个函数,对一个正整数n,算得到1需要的最少操作次数。操作规则为:如果n为偶数,将其除以2;如果n为奇数,可以加1或减1;一直处理下去。 例子: func(7) = 4,可以证明最少需要4次运算 n = 7 n-1 6 n/2 3 n-1 2 n/2 1 要求:实现函数(实现尽可能高效) int func(unsign int n);n为输入,返回最小的运算次数。给出思路(文字描述),完成代码,并分析你算法的时间复杂度。 答: · int func(unsigned int n) · { ·... 阅读全文
随笔档案-2012年8月12日
最长递减子序列
2012-08-12 19:30 by coodoing, 2755 阅读, 收藏, 编辑
摘要:
问题描述求一个数组的最长递减子序列比如{9,4,3,2,5,4,3,2}的最长递减子序列为{9,5,4,3,2}。问题分析本问题类似编程之美中的求数组中最长递增子序列问题。可以利用动态规划方法解决。假设在目标数组array[]的前i个元素中,最长递减子序列的长度为LDS[i]。那么 LDS[i+1] = max{1,LDS[k]+1},其中array[i+1]<array[k],for any k<=i。即如果array[i+1]<array[k],那么第i+1个元素可以添加到LDS[k]长的子序列后构成一个更长的递减子序列。与此同时,array[i+1]可以由自身构造成一个 阅读全文