精华内容
下载资源
问答
  • 最近工作需要 要求把python的代码写成java版本,python中有一个np.median()求中位数的方法,java决定手写一个先说说什么是中位数中位数就是中间的那个数,如果一个集合是奇数个,那么中位数就是按大小排列后,最...

    最近工作需要 要求把python的代码写成java版本,python中有一个np.median()求中位数的方法,java决定手写一个

    先说说什么是中位数:

    中位数就是中间的那个数,

    如果一个集合是奇数个,那么中位数就是按大小排列后,最中间那个数,

    如果一个集合是偶数个,那么中位数就是按大小排列后,最中间那2个数的平均数。

    比如:

    1,2,3,4,5  那中位数就是3

    1,2,3,4,5,6 那中位数就是 (3+4)/2 = 3.5

    知道逻辑后方法就很简单了 下面是代码

    public static void main(String[] args) {

    List total = new ArrayList();

    total.add(4);

    total.add(2);

    total.add(3);

    total.add(1);

    total.add(5);

    total.add(6);

    double a = median(total);

    System.out.println(a);

    }

    private static double median(List total) {

    double j = 0;

    //集合排序

    Collections.sort(total);

    int size = total.size();

    if(size % 2 == 1){

    j = total.get((size-1)/2);

    }else {

    //加0.0是为了把int转成double类型,否则除以2会算错

    j = (total.get(size/2-1) + total.get(size/2) + 0.0)/2;

    }

    return j;

    }

    1. 方法内先判断集合是奇数还是偶数,如果是奇数那么就是第n+1/2个数 ,也就是下标为n-1/2的值,

    如果是偶数 就是第n/2和n/2+1的数的平均值 也就是下标为n/2-1和n/2的平均值

    2. 该方法传入的是list集合  如果为数组  可以先用Arrays.aslist()方法转换后传入

    展开全文
  • 如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert...

    如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法读取数据流,使用GetMedian()方法获取当前读取数据的中位数。

    import java.util.ArrayList;
    import java.util.PriorityQueue;
    
    public class Solution {
        /**
         *如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,
         * 那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,
         * 那么中位数就是所有数值排序之后中间两个数的平均值。
         * 我们使用Insert()方法读取数据流,使用GetMedian()方法获取当前读取数据的中位数。
         *
         * 使用java中的优先队列,然后计算位置,取出数据,
         * 因为在取数据的过程中会把队列的数据取出,记录取出的数据,放回去就行了
         * 看有的人的挺复杂,可能是追求时间很短吧
         * 我这个我感觉时间复杂度NlogN
         * */
        PriorityQueue<Integer> p = new PriorityQueue<>();
        public void Insert(Integer num) {
            p.add(num);
        
        }
    
        public Double GetMedian() {
            int len = p.size();
            int count = (len + 1) / 2;
            ArrayList<Integer> lists = new ArrayList<>();
            for (int i = 0; i < count; ++i) {
                lists.add(p.poll());
            }
            if (len % 2 != 0) {
                p.addAll(lists);
                return lists.get(count - 1) * 1.0;
            } else {
                lists.add(p.poll());
                p.addAll(lists);
                return (lists.get(count - 1) + lists.get(count)) / 2.0;
            }
        }
    
    
    }

     

    展开全文
  • 如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。 思路:定义一...

    如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。

    思路:定义一个链表,每次插入数据时,遍历链表进行数据大小的比较,然后将数据插入合适的位置,然后根据数据的数量进行中位数的计算。

    import java.util.LinkedList;
    public class Solution {
        LinkedList<Integer> list = new LinkedList<Integer>();
        public void Insert(Integer num) {
            if (list.size()==0||num < list.getFirst()) {
                list.addFirst(num);
            } else {
                boolean insertFlag = false;
                for (Integer e : list) {
                    if (num < e) {
                        int index = list.indexOf(e);
                        list.add(index, num);
                        insertFlag = true;
                        break;
                    }
                }
                if (!insertFlag) {
                    list.addLast(num);
                }
            }
        }
        public Double GetMedian() {
            if (list.size() == 0) {
                return null;
            }
            if (list.size() % 2 == 0) {
                int i = list.size() / 2;
                Double a = Double.valueOf(list.get(i - 1) + list.get(i));
                return a / 2;
            }
            return Double.valueOf(list.get((list.size() + 1) / 2 - 1));
        }
    }
    展开全文
  • 如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert...

    1.题目描述

    如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法读取数据流,使用GetMedian()方法获取当前读取数据的中位数。

    2.算法描述

    什么是堆?

    堆就是用数组实现的一颗完全二叉树,最大堆的根元素值最大,并且左右子树也是最大堆;同理最小堆的定义类似。
    堆的定义

    方法

    \red{用两个堆来实现,就不用每次来一个元素都要排序。}
    minHeap,maxHeap\red{初始化两个堆,minHeap,maxHeap分别为最小堆和最大堆。}
    \red{插入元素操作:当一个元素进入数据流时,}
        ,\red{\ \ \ \ 若数据流中已有奇数个元素,则该元素先进入到最小堆中,然后将最小堆的根元素弹出并进入到最大堆中;}
        ,\red{\ \ \ \ 若数据流中已有偶数个元素,则该元素先进入到最大堆中,然后将最大堆的根元素弹出并进入到最小堆中。}
    经过上述操作之后:
    最小堆中装的是整个数据流从小到大的后一半元素(如果是奇数个元素,则还要多一个),
    最大堆中装的是整个数据流从小到大的前一半元素。

    \red{返回中位数操作:}
        \red{\ \ \ \ 若数据流中的元素是奇数个元素,则返回最小堆的根元素;}
        \red{\ \ \ \ 否则,则返回最小堆的根元素和最大堆根元素的平均值。}

    3.代码描述

    3.1.Java代码

    import java.util.*;
    public class Solution {
        private int count = 0;
        PriorityQueue<Integer> minHeap = new PriorityQueue<>();
        PriorityQueue<Integer> maxHeap = new PriorityQueue<>((o1,o2)->o2-o1);
        public void Insert(Integer num) {
            if(count % 2 == 0){
                //当数据总数为偶数时,新加入的元素,应当进入小根堆
                //不是直接进入小根堆,而是经大根堆筛选后取大根堆中最大元素进入小根堆
                 //新加入的元素先入到大根堆,由大根堆筛选出堆中最大的元素
                maxHeap.offer(num);
                int elem = maxHeap.poll();
                minHeap.offer(elem);
            }
            else{
                //当数据总数为奇数时,新加入的元素,应当进入大根堆
                //注意不是直接进入大根堆,而是经小根堆筛选后取小根堆中最大元素进入大根堆
                //新加入的元素先入到小根堆,由小根堆筛选出堆中最小的元素
                minHeap.offer(num);
                int elem = minHeap.poll();
                maxHeap.offer(elem);
            }
            count++;
        }
    
        public Double GetMedian() {
            if(count % 2 == 0){//如果是偶数个数  就把小顶堆的根元素和大顶堆的根元素 拿出
                return (minHeap.peek() + maxHeap.peek())/2.0;
            }
            else{//如果是奇数个数 那说明中位数就在小顶堆的根的位置
                return minHeap.peek()/1.0;
            }
        }
    
    
    }
    

    3.2.Python代码

    # -*- coding:utf-8 -*-
    class Solution:
        def __init__(self):
            self.data = []
        def Insert(self, num):
            self.data.append(num)
            self.data.sort()
        def GetMedian(self,data):
            length=len(self.data)
            if length%2==0:
                return (self.data[length//2]+self.data[length//2-1])/2.0
            else:
                return self.data[int(length//2)]
    
    
    展开全文
  • * 寻找两个有序数组的中位数 */ public class FindMedianSortedArrays { public static void main(String[] args) { int[] arr1={1,3,4,5}; int[] arr2={1,2,3,6,9}; System.out.println(fin...
  • 最近工作需要 要求把python的代码写成java版本,python中有一个np.median()求中位数的方法,java决定手写一个先说说什么是中位数中位数就是中间的那个数,如果一个集合是奇数个,那么中位数就是按大小排列后,最...
  • 键盘的扫描输入、包的调用、多位数倒序输出、多位数取余运算package com.bdqn.test;import java.util.Scanner;public class Person {public static void main(String[] args) {Scanner input =new Scanner(System.in...
  • 我正在计算由文本字段接收的输入填充的数组的总数,平均值和中位数。我已经设法计算出总计和平均值,我只是不能让中位数工作。我认为数组需要排序才能做到这一点,但我不知道如何做到这一点。这是问题,还是还有另外...
  • LeetCode4:给定两个大小为 m 和 n 的...示例 1:nums1 = [1, 3]nums2 = [2]则中位数是 2.0示例 2:nums1 = [1, 2]nums2 = [3, 4]则中位数是 (2 + 3)/2 = 2.5解法一:将两个数组合并后找中位数。class Solution {publ...
  • 现在 有10亿个int型的数字(JAVA中 int 型占4B),以及一台可用内存为1GB的机器,如何找出这10亿个数字的中位数中位数定义:数字排序之后,位于中间的那个数。比如将10亿个数字进行排序(位置从1到10亿),排序之后,...
  • 题目:在一个文件中有 10G 个整数,乱序排列,要求找出中位数。内存限制为 2G。只写出思路即可(内存限制为 2G的意思就是,可以使用2G的空间来运行程序,而不考虑这台机器上的其他软件的占用内存)。关于中位数:数据...
  • //"9.2"的9表示输出的长度,2表示小数点后的位数。 System.out.printf("%+9.2f",d);//"+"表示输出的带正负号。 System.out.printf("%-9.4f",d);//"-"表示输出的左对齐(默认为右对齐)。 System.out.printf("%+-...
  • java 计算中位数方法

    千次阅读 2019-01-04 15:51:14
    最近工作需要 要求把python的代码写成java版本,python中有一个np.median()求中位数的方法,java决定手写一个 先说说什么是中位数中位数就是中间的那个数, 如果一个集合是奇数个,那么中位数就是按大小排列...
  • 1、中位数定义2、算法思想3、Java代码实现4、时间复杂度分析5、附录中位数一般两种定义:第一种:排序后数组的中间位置的值,如果数组的个数是偶数个,则返回排序后数组的第N/2个数。第一种(官方):排序后数组的中间...
  • 数据流中的中位数java版)

    千次阅读 2017-06-06 10:53:50
    【题目描述】如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。... 求当前list中的中位数import java.util.ArrayList; import java.util.Arrays;
  • 主要介绍了java 计算中位数的实现方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • JavaStudy35:中位数

    2019-09-21 23:51:23
    JavaStudy35:中位数 总时间限制: 2000ms 内存限制: 65536kB 描述 中位数定义:一组数据按从小到大的顺序依次排列,处在中间位置的一个数或最中间两个数据的平均值(如果这组数的个数为奇数,则中位数为位于...
  • 根据快排的思路来做题目简化为求某个数组的最中间的两个,然后根据快排的思路进行排除即可,相对于快排大大减少了比较的次数,代码如下: import java.util.*;public class Main{// 利用快排的思路寻找一个数组...
  • 41.1 数据流中的中位数 题目描述 如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后...
  • 该楼层疑似违规已被系统折叠隐藏此楼查看此楼简介 中位数(Median)统计学名词。人教版初二教材内容(在高中必修3中也会出现)。北师大版初二上册内容。 1、定义:一组数据按从小到大(或从大到小)的顺序依次排列,处在...
  • 寻找中位数(Java)

    千次阅读 2019-06-27 22:23:55
    0),求两个数组中所有数的上中位数,要求:时间复杂度为O(logN)。 eg: a1={1,2,3,4}; a2={5,6,7,8}。返回值为4。 public class Solution2 { public static int findMid(int[] a1, int start1, int end1, int...
  • 背景:在做接口开发时,遇到一个需求是将...首先,想到的是#java中限制小数点的位数#,查到了以下的解决方案: Double dev=1.2999; DecimalFormat df = new DecimalFormat("#.00");// 保留五小数非四舍五入型 ...
  • java 商业保留有效位数和小数位数

    千次阅读 2018-01-19 11:59:29
    之前,我曾写过一篇 java使用BigDecimal 处理商业精度及高精度详解,如何去获取有效位数;当时的我,没有弄清楚有效和小数位数其实是互斥的! 导致在之后的工作业务出现了问题; 今天特意记录下; 问题的主要...
  • Java语言怎么计算一个数组中所有数字的中位数呢 要用代码完整写出来给我看看
  • Nowcoder java-数据流中的中位数 (题目来自牛客网) 思路 【面试题63-数据流中的中位数】 代码 import java.util.Comparator; import java.util.PriorityQueue; public class GetMedian { //小顶堆 private...
  • 查找中位数java 快速排序)

    千次阅读 2016-10-31 16:14:39
    中位数(又称中值,英语:Median),统计学中的专有名词,代表一个样本、种群或概率分布中的一个数值,其可将数值集合划分为相等的上下两部分。对于有限的数集,可以通过把所有观察值高低排序后找出正中间的一个作为...
  • Java实现 LeetCode 480 滑动窗口中位数

    万次阅读 多人点赞 2020-03-19 10:44:44
    480. 滑动窗口中位数 中位数是有序序列最中间的那个数。如果序列的大小是偶数,则没有最中间的数;此时中位数是最中间的两个数的平均数。 例如: [2,3,4],中位数是 3 [2,3],中位数是 (2 + 3) / 2 = 2.5 给你一个...
  • Java实现-中位数

    万次阅读 2017-06-18 14:48:42
    中位数是排序后数组的中间值,如果数组的个数是偶数个,则返回排序后数组的第N/2个数。 您在真实的面试中是否遇到过这个题?  Yes 样例 给出数组[4, 5, 1, 2, 3], 返回 3 给出数组[7, 9, 4, ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 15,783
精华内容 6,313
关键字:

中位数java

java 订阅