摘要: 1. 简述 设计一个算法,把一个含有N个元素的数组循环右移K位,要求时间复杂度为O(N),且只允许使用两个附加变量。2. 思路 其实看到题目中只允许两个附加变量应该也能想到,就是两个变量倒来倒去就行了。如果熟悉希尔排序的话,这题不是问题,希尔排序里面需要分组进行插入法排序,这里就是分组进行移位而已。 举例先说明下,假设10个元素,要移动3位,那么就是三组,第一组:A[0],A[3],A[6],A[9],第二组:A[1],A[4],A[7],第三组A[2],A[5],A[8],每组分别内部移位即可。 不过有一个问题必须注意,假设移动k为,数组长度为N,当k<=N/2时,没问题,但是当k&g 阅读全文
posted @ 2011-10-08 10:31 xiaodongrush 阅读(666) 评论(2) 推荐(0) 编辑
摘要: 1. 简述 写一个时间复杂度尽可能低的程序,求一个一维数组中最长递增子序列的长度。 例如在序列1,-1,2,-3,4,-5,6,-7中,其最长的递增子序列的长度为4(如1,2,4,6)。2. 思路 这个题目与前面求一维数组中子数组之和最大值有点像,不过区别还是很明显,比如:子数组是数组中一串连续相邻的数字,而子序列不一定是相邻的,因此要得到[0-k]的子数组最大和,只要分析[0-(k-1)]的子数组最大和即可,而考虑[0-k]的子序列的最长长度,就不能只分析[0-(k-1)]中子序列的最长长度。另外一个区别就是,子数组的和可以扩展到二维数组的情况,但是递增子序列就不好扩展了,最多也就扩展成杨氏 阅读全文
posted @ 2011-10-08 09:42 xiaodongrush 阅读(9199) 评论(2) 推荐(1) 编辑