两个已经从小到大排好序的数组A和B,长度分别是m和n,分别从两个数组A,B中拿出一个数a和b,定义s=a+b, 求s的第k小的值。例如:A={1,4,6,8,10} B={1,4,5,7,8}
            K=1,return 2(A[0]+B[0])
           K=2,return 5(A[0]+B[1])
             K=3,return 5(A[1]+B[0])
              K=4,return 6(A[0]+B[2])
求解法,最好用java

解决方案 »

  1.   

    这个题出的有问题啊,为什么K=2的时候不是A[1] + B[0]? 如果两个数的和都一样,K也应该是一样的啊
      

  2.   

    if a[0] < b[0]
     return B[a.length % k] + A[k-1]
    else
     return A[b.length % k] + B[k-1]
      

  3.   

    题目要求只可以A+B的形式,所以我们不用考虑是否B里面的用一个位置的数值和A里面同一个位置熟知的大小 if (K > a.length * b.length)
      return Integer.MIN
    }
     int i = 0
     while(true and i < a.length){
       if(k > a.length)
           return a[k / a.length -1] + b[k % b.length - 1]
      }else{
       a[0] + b[k-1]
      } 
    }
     
     
      

  4.   

    import java.util.*;public class Ssort{
    public static void main(String args[]){
    int[] A = {1,4,6,8,10};
    int[] B = {1,4,5,7,8};
    HashSet<Integer> set = new HashSet<Integer>();
    for(int i=0;i<A.length;++i){
    for(int j=0;j<B.length;++j){
    set.add(A[i]+B[j]);
    }
    }
    Integer[] AB = set.toArray(new Integer[0]);
    Arrays.sort(AB);
    for(int m=0;m<AB.length;++m){
    System.out.println("第"+ (m+1) + "小的数:" + AB[m]);
    }
    }
    }
      

  5.   


    如果像楼主的距离那样,相同的S值也要重复占位的话,把HashSet替换为ArrayList即可