1. 程式人生 > >[LeetCode]兩個排序陣列的中位數

[LeetCode]兩個排序陣列的中位數

思路


 
//使用TreeSet進行兩個陣列間的排序,但由於Set容器會把重複元素去除掉,所以我們自定義一個能保留重複元素的Comparator再傳入TreeSet,從而得到合併排列後含重的TreeSet,即可使用簡單的計算得到中值,以下是具體實現
重寫TreeSet的Comparator
class mCom implements Comparator{
@Override
public int compare(Object o1, Object o2) {
int resc; 
Integer i1=(Integer)o1;
Integer i2=(Integer)o2; 
resc= i1.compareTo(i2); 
//resc等於0為出現i1=i2,即出現重複元素,使resc=-1,將他排在左邊,resc=1,結果也一樣,因為i1=i2,在左或在右沒有區別
if(resc==0)
   { 
    resc=-1; 
   }
return resc;
} @Override

    public boolean equals(Object obj) { return false; }}

例項化TreeSet時傳入我們重寫的Comparator:
  TreeSet<Integer> ts=new TreeSet<>(new mCom());



   


  
   
  
  
   接下來就只需要把TreeSet轉換成toArray一下變為Integer陣列即可用簡單演算法獲取中值:
  
  
   
Integer a[]=ts.toArray(new Integer[0]);
     int b=a.length/2;
     if(a.length%2==0){
          res=(a[b]+a[b-1])/2.0;
          return res;
     }else {
           res=a[b];
           return res;
 

  
   完整程式碼如下:
   
   
   
   
   
   
  
  
   
   
LeetCodeMid.java
class Solution5 {
    //重寫Comparator中的compare告訴TreeSet如何排序
    class mCom implements Comparator{
        @Override
        public int compare(Object o1, Object o2) {
            int resc;
            Integer i1=(Integer)o1;
            Integer i2=(Integer)o2;
            resc= i1.compareTo(i2);
            if(resc==0){resc=-1;}
            return resc;
        }
        @Override
        public boolean equals(Object obj) { return false; }
    }
 //主方法
    public double findMedianSortedArrays(int[] nums1, int[] nums2) {
    //例項化TreeSet,傳入我們的Comparator
        TreeSet<Integer> ts=new TreeSet<>(new mCom());
        double res;
     //新增陣列元素進入TreeSet
        for(int i=0;i<nums1.length;i++){ ts.add(nums1[i]); }
        for (int j=0;j<nums2.length;j++){ ts.add(nums2[j]); }
    //把Tree轉換為Integer陣列
        Integer a[]=ts.toArray(new Integer[0]);
        //取中值
        int b=a.length/2;
        if(a.length%2==0){
            res=(a[b]+a[b-1])/2.0;
            return res;
        }else {
            res=a[b]; return res;
        }
    }
}