Find the top k sums of two sorted arrays

前端 未结 4 2006
独厮守ぢ
独厮守ぢ 2021-02-06 01:33

You are given two sorted arrays, of sizes n and m respectively. Your task (should you choose to accept it), is to output the largest k sums of the form a[i]+b[j].

4条回答
  •  南笙
    南笙 (楼主)
    2021-02-06 02:20

    As the pre-condition is the Array are sorted hence lets consider the following for N= 5;

    A[]={ 1,2,3,4,5}

    B[]={ 496,497,498,499,500}

    Now since we know Summation of N-1 of A&B would be highest hence just insert this in to heap along with the indexes of A & B element ( why, indexes? we'll come to know in a short while )

    H.insert(A[N-1]+B[N-1],N-1,N-1);

    now

     while(!H.empty()) { // the time heap is not empty 
    
     H.pop(); // this will give you the sum you are looking for 
    
     The indexes which we got at the time of pop, we shall use them for selecting the next sum element.
    
     Consider the following :
     if we have i & j as the indexes in A & B , then the next element would be  max ( A[i]+B[j-1], A[i-1]+B[j], A[i+1]+B[j+1] ) , 
     So, insert the same if that has not been inserted in the heap
     hence
     (i,j)= max ( A[i]+B[j-1], A[i-1]+B[j], A[i+1]+B[j+1] ) ;
     if(Hash[i,j]){ // not inserted 
        H.insert (i,j);
     }else{
        get the next max from max ( A[i]+B[j-1], A[i-1]+B[j], A[i+1]+B[j+1] ) ; and insert.                      
     }
    
     K pop-ing them will give you max elements required.
    

    Hope this helps

提交回复
热议问题