精华内容
下载资源
问答
  • java 计算中位数方法
    万次阅读
    2019-01-04 15:51:14

    最近工作需要 要求把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<Integer> total = new ArrayList<Integer>();
    	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<Integer> 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()方法转换后传入

    更多相关内容
  • java 计算中位数的实现方法

    千次阅读 2021-03-13 23:47:47
    最近工作需要 要求把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()方法转换后传入

    补充知识:Java计算中位数、方差、标准差、众数

    我就废话不多说了,大家还是直接看代码吧~

    import java.text.DecimalFormat;

    import java.util.*;

    /**

    * 数学算法(数学算法(方差、标准差、中位数、众数))

    * @author

    *

    */

    public class MathAlgorithm {

    private final static double dmax = 999;// Double.MAX_VALUE;//Double类型的最大值,太大的double值,相乘会达到无穷大

    private final static double dmin = Double.MIN_VALUE;// Double类型的最小值

    private final static int n = 100;// 假设求取100个doubl数的方差和标准差

    public static void main(String[] args) {

    Random random = new Random();

    double[] x = new double[n];

    for (int i = 0; i < n; i++) {// 随机生成n个double数

    x[i] = Double.valueOf(Math.floor(random.nextDouble() * (dmax - dmin)));

    System.out.println(x[i]);

    }

    // 设置doubl字符串输出格式,不以科学计数法输出

    DecimalFormat df = new DecimalFormat("#,##0.00");// 格式化设置

    // 计算方差

    double dV = getVariance(x);

    System.out.println("方差=" + df.format(dV));

    // 计算标准差

    double dS = getStandardDiviation(x);

    System.out.println("标准差=" + df.format(dS));

    int[] intArr={5,10,15,8,6};

    System.out.println(Arrays.toString(intArr)+" 中位数:"+median(intArr));

    int[] intArr2={5,10,15,8,6,7};

    System.out.println(Arrays.toString(intArr2)+" 中位数:"+median(intArr2));

    int[] arr = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 1, 2, 2, 3, 4, 5};

    List modalNums = getModalNums(arr);

    System.out.println("众数:"+modalNums);

    float[] arr2 = {0.1f, 1.1f, 2.1f, 3.1f, 4.1f, 5.1f, 6.1f, 7.1f, 8.1f, 9.1f, 10.1f, 1.1f, 1.1f, 2.1f, 2.1f, 3.1f, 4.1f, 5.1f};

    List modalNums2 = getModalNums(arr2);

    System.out.println("众数:"+modalNums2);

    }

    /**

    * 方差s^2=[(x1-x)^2 +...(xn-x)^2]/n

    * @param x

    * @return

    */

    public static double getVariance(double[] x) {

    int m = x.length;

    double sum = 0;

    for (int i = 0; i < m; i++) {// 求和

    sum += x[i];

    }

    double dAve = sum / m;// 求平均值

    double dVar = 0;

    for (int i = 0; i < m; i++) {// 求方差

    dVar += (x[i] - dAve) * (x[i] - dAve);

    }

    return dVar / m;

    }

    /**

    * 标准差σ=sqrt(s^2)

    * @param x

    * @return

    */

    public static double getStandardDiviation(double[] x) {

    int m = x.length;

    double sum = 0;

    for (int i = 0; i < m; i++) {// 求和

    sum += x[i];

    }

    double dAve = sum / m;// 求平均值

    double dVar = 0;

    for (int i = 0; i < m; i++) {// 求方差

    dVar += (x[i] - dAve) * (x[i] - dAve);

    }

    return Math.sqrt(dVar / m);

    }

    /**

    * 中位数(int)

    * @param nums: A list of integers.

    * @return: An integer denotes the middle number of the array.

    */

    public static int median(int []nums){

    if(nums.length==0)

    return 0;

    int start=0;

    int end=nums.length-1;

    int index=partition(nums, start, end);

    if(nums.length%2==0){

    while(index!=nums.length/2-1){

    if(index>nums.length/2-1){

    index=partition(nums, start, index-1);

    }else{

    index=partition(nums, index+1, end);

    }

    }

    }else{

    while(index!=nums.length/2){

    if(index>nums.length/2){

    index=partition(nums, start, index-1);

    }else{

    index=partition(nums, index+1, end);

    }

    }

    }

    return nums[index];

    }

    private static int partition(int nums[], int start, int end){

    int left=start;

    int right=end;

    int pivot=nums[left];

    while(left

    while(left=pivot){

    right--;

    }

    if(left

    nums[left]=nums[right];

    left++;

    }

    while(left

    left++;

    }

    if(left

    nums[right]=nums[left];

    right--;

    }

    }

    nums[left]=pivot;

    return left;

    }

    /**

    * 中位数(float)

    * @param nums: A list of integers.

    * @return: An integer denotes the middle number of the array.

    */

    public static float median(float []nums){

    if(nums.length==0)

    return 0;

    int start=0;

    int end=nums.length-1;

    int index=partition(nums, start, end);

    if(nums.length%2==0){

    while(index!=nums.length/2-1){

    if(index>nums.length/2-1){

    index=partition(nums, start, index-1);

    }else{

    index=partition(nums, index+1, end);

    }

    }

    }else{

    while(index!=nums.length/2){

    if(index>nums.length/2){

    index=partition(nums, start, index-1);

    }else{

    index=partition(nums, index+1, end);

    }

    }

    }

    return nums[index];

    }

    private static int partition(float nums[], int start, int end){

    int left=start;

    int right=end;

    float pivot=nums[left];

    while(left

    while(left=pivot){

    right--;

    }

    if(left

    nums[left]=nums[right];

    left++;

    }

    while(left

    left++;

    }

    if(left

    nums[right]=nums[left];

    right--;

    }

    }

    nums[left]=pivot;

    return left;

    }

    /**

    * 众数(int)

    * 众数:在一个数组中出现次数最多的数

    * 如果存在多个众数,则一起返回

    * @param arr

    * @return

    */

    public static List getModalNums(int[] arr) {

    int n = arr.length;

    if (n == 0) {

    return new ArrayList();

    }

    if (n == 1) {

    return Arrays.asList(arr[0]);

    }

    Map freqMap = new HashMap<>();

    for (int i = 0; i < n; i++) { // 统计数组中每个数出现的频率

    Integer v = freqMap.get(arr[i]);

    // v == null 说明 freqMap 中还没有这个 arr[i] 这个键

    freqMap.put(arr[i], v == null ? 1 : v + 1);

    }

    // 将 freqMap 中所有的键值对(键为数,值为数出现的频率)放入一个 ArrayList

    List> entries = new ArrayList<>(freqMap.entrySet());

    // 对 entries 按出现频率从大到小排序

    Collections.sort(entries, new Comparator>() {

    @Override

    public int compare(Map.Entry e1, Map.Entry e2) {

    return e2.getValue() - e1.getValue();

    }

    });

    List modalNums = new ArrayList<>();

    modalNums.add(entries.get(0).getKey()); // 排序后第一个 entry 的键肯定是一个众数

    int size = entries.size();

    for (int i = 1; i < size; i++) {

    // 如果之后的 entry 与第一个 entry 的 value 相等,那么这个 entry 的键也是众数

    if (entries.get(i).getValue().equals(entries.get(0).getValue())) {

    modalNums.add(entries.get(i).getKey());

    } else {

    break;

    }

    }

    return modalNums;

    }

    /**

    * 众数(float)

    * 众数:在一个数组中出现次数最多的数

    * 如果存在多个众数,则一起返回

    * @param arr

    * @return

    */

    public static List getModalNums(float[] arr) {

    int n = arr.length;

    if (n == 0) {

    return new ArrayList();

    }

    if (n == 1) {

    return Arrays.asList(arr[0]);

    }

    Map freqMap = new HashMap<>();

    for (int i = 0; i < n; i++) { // 统计数组中每个数出现的频率

    Integer v = freqMap.get(arr[i]);

    // v == null 说明 freqMap 中还没有这个 arr[i] 这个键

    freqMap.put(arr[i], v == null ? 1 : v + 1);

    }

    // 将 freqMap 中所有的键值对(键为数,值为数出现的频率)放入一个 ArrayList

    List> entries = new ArrayList<>(freqMap.entrySet());

    // 对 entries 按出现频率从大到小排序

    Collections.sort(entries, new Comparator>() {

    @Override

    public int compare(Map.Entry e1, Map.Entry e2) {

    return e2.getValue() - e1.getValue();

    }

    });

    List modalNums = new ArrayList<>();

    modalNums.add(entries.get(0).getKey()); // 排序后第一个 entry 的键肯定是一个众数

    int size = entries.size();

    for (int i = 1; i < size; i++) {

    // 如果之后的 entry 与第一个 entry 的 value 相等,那么这个 entry 的键也是众数

    if (entries.get(i).getValue().equals(entries.get(0).getValue())) {

    modalNums.add(entries.get(i).getKey());

    } else {

    break;

    }

    }

    return modalNums;

    }

    }

    以上这篇java 计算中位数的实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持聚米学院。

    展开全文
  • Java实现-中位数

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

    给定一个未排序的整数数组,找到其中位数。

    中位数是排序后数组的中间值,如果数组的个数是偶数个,则返回排序后数组的第N/2个数。

    样例

    给出数组[4, 5, 1, 2, 3], 返回 3

    给出数组[7, 9, 4, 5],返回 5

    挑战 

    时间复杂度为O(n)

    public class Solution {
        /**
         * @param nums: A list of integers.
         * @return: An integer denotes the middle number of the array.
         */
        public static int median(int []nums){
    		if(nums.length==0)
    			return 0;
    		int start=0;
    		int end=nums.length-1;
    		int index=partition(nums, start, end);
    		if(nums.length%2==0){
    			while(index!=nums.length/2-1){
    				if(index>nums.length/2-1){
    					index=partition(nums, start, index-1);
    				}else{
    					index=partition(nums, index+1, end);
    				}
    			}
    		}else{
    			while(index!=nums.length/2){
    				if(index>nums.length/2){
    					index=partition(nums, start, index-1);
    				}else{
    					index=partition(nums, index+1, end);
    				}
    			}
    		}
    		return nums[index];
    	}
    	private static int partition(int nums[], int start, int end){
    		int left=start;
    		int right=end;
    		int pivot=nums[left];
    		while(left<right){
    			while(left<right&&nums[right]>=pivot){
    				right--;
    			}
    			if(left<right){
    				nums[left]=nums[right];
    				left++;
    			}
    			while(left<right&&nums[left]<=pivot){
    				left++;
    			}
    			if(left<right){
    				nums[right]=nums[left];
    				right--;
    			}
    		}
    		nums[left]=pivot;
    		return left;
    	}
    
    }
    



    展开全文
  • 查找中位数java 快速排序)

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

    中位数(又称中值,英语:Median),统计学中的专有名词,代表一个样本、种群或概率分布中的一个数值,其可将数值集合划分为相等的上下两部分。对于有限的数集,可以通过把所有观察值高低排序后找出正中间的一个作为中位数。如果观察值有偶数个,通常取最中间的两个数值的平均数作为中位数。
    java代码:

    import java.util.*;
    /**
     * @version 1.0
     * @author zhouxiaowu
     *
     */
    public class MedianFinder {
        public static void main(String[] args){
            Scanner sc = new Scanner(System.in);
            System.out.println("please input some numbers:");
            String str = sc.nextLine();
            String[] s = str.split("\\s+");
            int[] num= new int[s.length];
            for(int i=0;i<s.length;i++){
                num[i]=Integer.parseInt(s[i]);
            }
            double med=medianFinder(num);
            System.out.println("median is :"+med);
    
        }
        public static double medianFinder(int[] num){
            int mid;
            int len=num.length;
            double med;
    
            if(len%2==0){
                mid=len/2;
             med=(select(num,mid)+select(num,mid-1))/2.0;
            }
            else{
                mid=(len-1)/2;
                med=(double)select(num,mid);
            }
            return med;
        }
        public static int select(int[] num,int k){
            int low=0;
            int high=num.length-1;
            int j=0;
            int val=0;
            while(low<high){
                j=partition(num,low,high);
                if(j==k){
                    val=num[j];
                    break;
                }else if(j>k){
                    high=j-1;
                }else{
                    low=j+1;
                }
            }
            return val;
    
        }
        public static int partition(int[] num,int low,int high){
            int i=low;
            int j=high;
            int temp=num[i];
            while(i<j){
                while(i<j && temp<=num[j])
                    j--;
                if(i<j)
                    num[i++]=num[j];
                while(i<j && temp>=num[i])
                    i++;
                if(i<j)
                    num[j--]=num[i];
            }
            num[i]=temp;
            return i;
        }
    
    }
    

    测试结果:
    input:4 6 8 1 9 7 5
    output:median is :6.0
    input:4 3 6 1 9 6
    output:median is :5.0

    展开全文
  • JAVA求数组的平均数,众数,中位数

    千次阅读 2021-07-03 13:55:48
    中位数中位数是指把一组数据从小到大排列,如果这组数据的个数是奇数,那最中间那个就是中位数,如果这组数据的个数为偶数,那就把中间的两个数之和除以2,所得的结果就是中位数。 众数:众数是指一组数据中出现...
  • Java||求集合数组中的中位数

    千次阅读 2019-08-03 22:05:44
    中位数: 简单解释就是最中间的那个数,如果集合是奇数个,则中位数是按大小排列最中间那个数,如果集合是偶数个,则中位数就是按大小排列最中间那两个数的平均数。 求解: 先判断这个集合是奇数还是偶数,如果是...
  • java中如何控制输出数字位数

    千次阅读 2021-02-26 09:28:32
    //"9.2"的9表示输出的长度,2表示小数点后的位数。 System.out.printf("%+9.2f",d);//"+"表示输出的带正负号。 System.out.printf("%-9.4f",d);//"-"表示输出的左对齐(默认为右对齐)。 System.out.printf("%...
  • 2019年9月北京Java程序员平均工资18996元,工资中位数16500元,其中95%的人的工资介于7000元到45000元。 2020年9月上海招收Java程序员20486人。2019年9月上海Java程序员平均工资17707元,工资中位数16500元,其中95%...
  • Java实现 LeetCode 480 滑动窗口中位数

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

    千次阅读 2021-03-16 13:30:22
    Java判断数字位数的方法总结发布于 2020-7-5|复制链接本文给大家整理了Java判断数字位数的两种常用方法,对此有兴趣的可以跟着小妖一起学习下。普通方法:```javaimport java.util.Scanner;public class Digits {...
  • Java实现 LeetCode 4 寻找两个有序数组的中位数

    万次阅读 多人点赞 2020-02-11 18:54:06
    寻找两个有序数组的中位数 给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。 你可以假设 nums1 和 nums2 不会同时为空。 示例 1: ...
  • 展开全部 /** * @param args */ public static void main(String[] args) { Scanner in = ... } 因为是多位数,也不知道多少位,所32313133353236313431303231363533e78988e69d8331333337613838以用大数类型。
  • JAVA中生成指定位数随机数的方法很多,下面列举几种比较常用的方法。方法一、通过Math类1 public static String getRandom1(intlen) {2 int rs = (int) ((Math.random() * 9 + 1) * Math.pow(10, len - 1));3 return...
  • java数字位数不足在前后补0

    千次阅读 2021-02-12 15:32:47
    java整数或数字字符串位数不足前面或后面补零的方法,一般都是使用自定义简单封装、String.format、NumberFormat等都可以实现。自定义简单封装/***数字不足位数前后补0*@paramnum参与补零的数字*@paramlen最终位数...
  • java生成随机四位数

    千次阅读 2019-08-24 15:16:52
    int r =int a0 = (int)(Math.random()*8998)+1000+1;
  • Java算法系列》数组找中位数

    千次阅读 2018-06-28 11:20:09
    请找出这两个有序数组的中位数。示例 1:nums1 = [1, 3] nums2 = [2] 中位数是 2.0 示例 2:nums1 = [1, 2] nums2 = [3, 4] 中位数是 (2 + 3)/2 = 2.5 public double findMedianSortedArrays(int arr1[],i...
  • 关于java:生成6位数的随机数

    千次阅读 2021-03-08 03:39:30
    本问题已经有最佳答案,请猛点这里访问。... 数字是0,可以在其显示表示填充到"000000",但0与000000的数字相同。 如果您想要6数字,则需要100000到999999范围内的数字。 如果你需要一个6数字...
  • Java实现 LeetCode 295 数据流的中位数

    千次阅读 2020-03-05 17:04:00
    295. 数据流的中位数 中位数是有序列表中间的数。如果列表长度是偶数,中位数则是中间两个数的平均值。 例如, [2,3,4...
  • java程序员平均工资多少,详细说明

    千次阅读 2022-01-18 14:11:33
    2021Java开发前景分析对于拥有Java技术的程序员来说,就业前景特别广阔、直观、清晰。如果你想成为一名Java程序员,你必须不断学习。拥有优秀的Java技术对未来来来说更容易。 3、工资待遇 根据全国Java从业人员的工资...
  • Java中控制输出小数位数

    万次阅读 多人点赞 2018-09-05 18:49:46
    import java.math.BigDecimal; import java.text.DecimalFormat; import java.text.NumberFormat; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Sc....
  • java中 怎样实现随机4的整数?

    千次阅读 2021-02-12 19:47:59
    //输出 } } 说明: 1、Java中Math类中有random方法产生的随机数是一个伪随机选择的(大致)均匀分布在从0.0到1.0这一范围内的double类型 2、java.util.Random类中实现的随机算法是伪随机,也就是有规则的随机,...
  • 人求出的有数值意义比如可以念出个十百千的 但是我的方法里 计算机求出的是一串数字 而不是几千几百这样 人读一串数字会习惯读值就是几百几十这样 就是从右边开始 但是我们使用计算机读一个。数字如果没有一个...
  • Java常用数学函数总结及求数组的平均数、中位数和众数
  • 得到三位数的百位、十位、个位。 class Test6{ public static void main(String[] args){ // 遍历100-999所有三位数 for(int i=100; i<1000; i++){ int ge = i % 10; int shi = (i % 100) / 10; ...
  • java求六位数以内所有自幂

    千次阅读 2022-01-15 14:01:50
    六位数以内所有自幂
  • java生成随机数保留点后两

    千次阅读 2021-02-13 00:57:51
    1.生成随机数的方法有Math.random和new Random.nextXXX();double a=Math.random()*10;double b=new Random().nextDouble()*10;System.out.println(a+"------"+b);//输出结果:4....保留两小数的方法有De...
  • // 输出三位数,并提取每个数字的个位、十位、百位 for(int n=100;n<=200;n++) { int x=n%10; int y=n/10%10; int z=n/100; System.out.println(n+"的个位"+x+",十位"+y+",个位"+z); } } 运行结果:...
  • Java中比较数字的大小

    万次阅读 2018-10-15 12:01:23
    Java中比较两个或者几个数字的大小,有多种方法,在这里,因为我刚刚学习Java,就用了最简单的命令实现一下,代码如下: 找出三个数字中的最大(小)值: ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 636,278
精华内容 254,511
关键字:

java中位数

java 订阅