lintcode算法題之1662-中位數下標

1662. 中位數下標

 

給出一個含有 n 個互不相等整數的無序數組,找到其中中位數的下標。下標從 0 開始。

中位數是指這些數排序後最中間的數。

若 n 爲偶數,則中位數是數組排序後的第 n/2 個數。

樣例

樣例 1:

輸入:[4,5,1,2,3]
輸出:4

樣例 2:

輸入:[7,9,4,5]
輸出:3

代碼區:

public class Solution {
    /**

     *  username:softstarhhy
     * @param a: the array a
     * @return: return the index of median
     */
    public int getAns(int[] a) {
        int midnum=0;
        int loc=0;//回溯位置
        int[] b=new int[a.length];
        for(int k=0;k<a.length;k++)
        {
            b[k]=a[k];
        }
        
        // write your code here 
        for (int i=0;i<a.length ;i++ )
        {
         for( int j=a.length-1;j>i;j--)
         {
             if(a[j]<a[j-1])
             {
                 int mid=a[j];
                 a[j]=a[j-1];
                 a[j-1]=mid;
                 
             }
         }
        }
      
        /*if(a.length%2==0)
        {
          midnum=(a.length/2)+2;
          
        }
        else
        {
            midnum=(a.length+1)/2+1;
            System.out.println(midnum);
        }*/
         // 尋找中位數在原數組的位置
      int m = a.length;
      int curnum=0;
        if (m%2==0){     //中位數判斷條件
           curnum= a[m/2-1];

      //重新在亂序原數組中尋找中位數位置
           for(int n=0;n<b.length;n++)
           {
               if(curnum==b[n])
               {
                loc= n;  
               }
           }
        }
        else{
            curnum= a[m/2]; //中位數判斷條件

         //重新在亂序原數組中尋找中位數位置
             for(int n=0;n<b.length;n++)
           {
               if(curnum==b[n])
               {
                 loc= n;  
               }
           }
        }
        return loc;
    }
    
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章