1.S集合包含n个正整数,并且∑S=2m,在S中是否存在子集T,有∑T=m
2.任给数组A[0,n),将其前后颠倒
统一接口:void reverse(int *A,int lo,int hi)
递归版:
if(lo<hi) { swap(A[lo],A[hi]); reverse(A,lo+1,hi-1): }
3.从数组区间A[lo,hi)找出最大的两个整数A[x1]和A[x2]
思路1:第一趟循环中找出最大值位置x1,然后在[lo,x1)和[x1,hi)两个区间中分别循环,找出除x1位置之外的最大的两个值,两者取其大者则为第二大值,T(n)=2n-3
思路2:采用两个指针x1,x2分别维护最大值和次大值,初始时分别指向前两个值,一趟扫描中,依次取数组中的元素分别与x1,x2两个值进行比较,并根据比较情况进行替换
T(n)=n-1或者T(n)=2n-3
思路3:递归+分治,分别求出子数组的最大元素和次大元素