因为有序,所以可以用类似二分排除的策略,时间复杂度为log(min(m,n))。

    1. typedef vector<int>::iterator itr;
    2. int findKthInTwoArr(itr A, int m, itr B, int n, int k){
    3. if(m>n){
    4. return findKthInTwoArr(B,n,A,m,k);
    5. }
    6. if(m==0){
    7. return *(B+k-1);
    8. }
    9. if(k==1){
    10. return min(*A,*B);
    11. }
    12. int a=min(k/2,m);
    13. int b=k-a;
    14. if(*(A+a-1)<*(B+b-1)){
    15. return findKthInTwoArr(A+a,m-a,B,n,k-a);
    16. }else if(*(B+b-1)<*(A+a-1)){
    17. return findKthInTwoArr(A,m,B+b,n-b,k-b);
    18. }else{
    19. return *(A+a-1);
    20. }
    21. }