两个已排序数组A[m]、B[n],求两者所有元素的第k大的元素
方法一
直接merge两个数组,然后求第K大的元素
方法二
使用计数器h记录当前已经找到第m大的元素;
使用两个指针pA和pB,分别指向数组A和B;
如果A当前元素小,pA++,m++;
如果B当前元素小,pB++,m++;
当m==k,得到答案。
O(k)时间,O(1)空间。
1 | private: |
方法三
充分利用有序,每次排除k/2个元素,使用递归
·当A或B为空时,直接返回B[k-1]或A[k-1]
·当k==1时,返回min(A[0], B[0])
·当A[k/2 - 1] == B[k/2 - 1]时,返回A[k/2 - 1]或B[k/2 - 1]
假设A和B的元素个数都大于k/2,
·if (A[k/2 - 1] < B[k/2 - 1]) 排除A数组的k/2个元素。
·else if (A[k/2 - 1] > B[k/2 - 1]) 排除B数组的k/2个元素。
·else 找到了第k大的元素,直接返回A[k/2 - 1]或B[k/2 - 1]
1 | class Solution { |