- 论坛徽章:
- 0
|
本帖最后由 w359405949 于 2014-05-20 13:34 编辑
A 3,2,1 B 4,2,3
0,最大和最小是特例,可以在排序后直接获得,这里只给出求[2, k-1]的O(nlogn)算法
1,分别排序
A 3,2,1 B 4,3,2
2,分别求数组中每个元素相对于该组最大数的差值
A 0,1,2 B 0,1,2
3,以2中求取出来的差值将两个数组的数排序得数组C,并标记为数组A还是数组B,两个组最大的数不纳入排序
C 2(A, 1) 3(B, 1) 1(A, 2) 2(B, 2)
4,取K个最大,那么就从C中依次取值,并与相对的数组最大值相加,那就是第K个最大数的值。
例:
k = 2
2(A, 1) + 4(B) = 6
k = 3
3(B, 1) + 3(A) = 6
k = 4
1(A, 2) + 4(B) = 5
k = 5
2(B, 2) + 3(A) = 5
得:[2, k - 1]的顺序为 6, 6, 5, 5 (相同解可合并可不合并)
算法复杂度为:
快排(步骤1)O(nlog n) + 分别求值(步骤2)O(n) + 合并排序(步骤3)O(n) + 取值 (步骤4)O(k) = n log n (算法总时间取决于排序的时间复杂度)
===
上次把快排的时间复杂度记错了,这里做修正。
|
|