问题: 数据流中位数 求解 时间复杂度度 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)
谁能指导我下,这个需要如何去做,谢谢!!!
浙公网安备 33010602011771号