• Ex 2_22 两个有序列表合并后的第k小元素..._第四次作业


     1 package org.xiu68.ch02;
     2 
     3 public class Ex2_22 {
     4 
     5     public static void main(String[] args) {
     6         // TODO Auto-generated method stub
     7         //两数组有序,寻找两数组合并后第k小元素,O(logm+logn)
     8         int[] a=new int[]{1,3,5,7,9,11,13,15,17,19};
     9         int[] b=new int[]{0,2,4,6,8,10,12,14,16,18};
    10         
    11         for(int k=1;k<11;k++){
    12             int result=find(a, b, 0, a.length-1, 0, b.length-1, k);
    13             System.out.println(result);
    14         }
    15     }
    16     
    17     public static int find(int a[],int b[],int aStart,int aEnd,int bStart,int bEnd,int k){
    18         int aMid = (aStart + aEnd) / 2;    //a数组中间元素位置
    19         int bMid = (bStart + bEnd) / 2;    //b数组中间元素位置
    20         if (aStart > aEnd)                //a数组要计算元素个数为0
    21             return b[bStart+k-1];
    22         if (bStart > bEnd)                //b数组要计算元素个数为0
    23             return a[aStart+k-1];    
    24         
    25         if (a[aMid] <= b[bMid]) {        //b[中间位置]大于a[中间位置]的情况
    26             if (k <= (aMid-aStart) + (bMid-bStart) + 1)    //k小于两数组合并后的中间位置
    27                 return find(a,b,aStart, aEnd, bStart, bMid-1, k);
    28             else                                        //k大于两数组合并后的中间位置
    29                 return find(a,b,aMid+1, aEnd, bStart, bEnd, k-(aMid-aStart)-1);
    30         } else {                        //a[中间位置]大于b[中间位置]的情况
    31             if (k <= (aMid-aStart) + (bMid-bStart) + 1)
    32                 return find(a,b,aStart, aMid-1, bStart, bEnd, k);
    33             else
    34                 return find(a,b,aStart, aEnd, bMid+1, bEnd, k-(bMid-bStart)-1);
    35         }
    36     }
    37 }
    View Code
  • 相关阅读:
    BZOJ1513: [POI2006]Tet-Tetris 3D
    BZOJ3210: 花神的浇花集会
    BZOJ3207: 花神的嘲讽计划Ⅰ
    BZOJ3170: [Tjoi 2013]松鼠聚会
    BZOJ3747: [POI2015]Kinoman
    解题:POI 2008 Subdivision of Kingdom
    解题:JSOI 2007 重要的城市
    解题:USACO13NOV No Change
    解题:洛谷1120 小木棍
    解题:SCOI 2008 配对
  • 原文地址:https://www.cnblogs.com/xiu68/p/7989161.html
Copyright © 2020-2023  润新知