怎么将数组里最长的连续增加的数字提取出来作为一个新的数组?如果有多个数组长度相同,则返回最后的一个。
参考:http://www.cnblogs.com/iyangyuan/p/3929914.html
你也没说语言,我就写一份伪代码给你吧
一个递归实现FIND_LONGEST_SUBARRAY函数:
FIND_LONGEST_SUBARRAY(A, low, high)
if high == low
return (low, high)
else mid = (low+high)/2
(left_low, left_high) = FIND_LONGEST_SUBARRAY(A, low, mid)
(right_low, right_high) = FIND_LONGEST_SUBARRAY(A, mid+1, high)
(cross_low, cross_high) = FIND_LONGEST_CROSSING_SUBARRAY(A, low, mid, high)
return LONGEST((left_low, left_high), (right_low, right_high), (cross_low, cross_high))
其中,判断跨越数组中间的判断最长子数组函数:
FIND_LONGEST_CROSSING_SUBARRAY(A, low, mid, high)
left_side = mid
right_side = mid
while(A[left_side] > A [left_side-1])
left_side = left_side -1
while(A[right_side] < A[right_side+1])
right_side = right_side+1
return (left_side, right_side)
灵感来源:《算法导论》第四章分治策略 4.1最大子数组问题