问题: 数据流中位数 求解 时间复杂度度 java

今天练习了一题:

  数据流中位数

      问题描述:数字是不断进入数组的,在每次添加一个新的数进入数组的同时返回当前新数组的中位数。

  案例:

      持续进入数组的数的列表为:[1, 2, 3, 4, 5],则返回[1, 1, 2, 2, 3]

      持续进入数组的数的列表为:[4, 5, 1, 3, 2, 6, 0],则返回 [4, 4, 4, 3, 3, 3, 3]

      持续进入数组的数的列表为:[2, 20, 100],则返回[2, 2, 20]

  个人实现代码如下:

  main方法:

1 public static void main(String[] args) {
2         
3         int[] nums=new int[]{1, 2, 3, 4, 5};
4         int[] arrs=medianII(nums);
5         for(int a:arrs){
6             System.out.println(a);
7         }
8     }

 

  实现方法 1 public static int[] medianII(int[] nums) { 2 int[] arrs=new int[nums.length];

 3         
 4         for(int i=0;i<nums.length;i++){
 5             
 6             int[] nArrs=
 7                     new int[i+1];
 8             System.arraycopy(nums, 0, nArrs, 0, i+1);
 9             int nu=MedianNum(nArrs);
10             //把中位数存入arrs数组
11             
12             arrs[i]=nu;
13         }
14         return arrs;
15     }
16     
    //获取中位数方法 17 public static int MedianNum(int[] nums){ 18 int a=0; 19 Arrays.sort(nums); 20 21 int c=nums.length/2; 22 if(nums.length%2==0){ 23 a=nums[c-1]; 24 }else{ 25 a=nums[c]; 26 } 27 return a; 28 }

系统检测的时候:你的代码运行时间超过了限制,检查你的时间复杂度。TLE通常是由死循环造成的,思考一下你的时间复杂度是否是最优的。

 

 

挑战:时间复杂度为O(nlogn)

 

谁能指导我下,这个需要如何去做,谢谢!!!

 

posted on 2017-08-31 09:34  陈陈之之  阅读(445)  评论(0)    收藏  举报