面试真题给定一个List<Double>num,每个元素的值随机从[0,1]取,请用2个线程分别计算num的均值和中位数;要求并行执行,等到两个线程都执行完毕后,取均值和中位数的最大值作为输出
Posted Cry丶
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面试真题给定一个List<Double>num,每个元素的值随机从[0,1]取,请用2个线程分别计算num的均值和中位数;要求并行执行,等到两个线程都执行完毕后,取均值和中位数的最大值作为输出相关的知识,希望对你有一定的参考价值。
给定一个List<Double> num,num.size()为0xFFFF,每个元素的值随机从[0,1]取,请用2个线程分别计算num的均值和中位数; 要求这两个线程是并行执行(注意不是顺序执行,即"不是"一个线程执行完毕再执行第二个线程),等到两个线程都执行完毕后,取均值和中位数的最大值作为输出。
我们选用的 OpenJDK 14 最新环境,你的 java 代码会传送至 ShowMeBug 提供的该环境中。
你必须定义一个 ShowMeBug 类和 public static void main(String[] args) 方法,这样我们才能运行出结果。
一个简单的例子:
public class ShowMeBug
public static void main(String[] args)
System.out.println("Hello World!");
你可以使用下面的库:
import java.io.*;
import java.util.*;
import java.math.*;
import java.util.regex.*;
import java.util.stream.*;
import java.text.*;
import java.security.SecureRandom;
import java.util.function.*;
import java.util.concurrent.*;
import com.fasterxml.jackson.core.*;
import com.fasterxml.jackson.core.type.*;
import com.fasterxml.jackson.databind.*;
参考代码:
class Solution
private static CountDownLatch latch = new CountDownLatch(2);
// List<Double> = [0.1,0.2,0.3,0.4,0.5,0.6,0.7]
public static double solution(List<Double> num)
CountMeanThread countMeanThread = new CountMeanThread(num,latch);
countMeanThread.start();
CountMidThread countMidThread = new CountMidThread(num,latch);
countMidThread.start();
// 等待门栓countdown到0,放行
try
latch.await();
catch (InterruptedException e)
e.printStackTrace();
return Math.max(countMeanThread.mean,countMidThread.mid);
class CountMeanThread extends Thread
List<Double> num;
double sum = 0.0;
double mean = 0.0;
CountDownLatch latch;
public CountMeanThread(List<Double> num,CountDownLatch latch)
this.num = num;
this.latch = latch;
@Override
public void run()
for(int i = 0;i < num.size();i++)
sum = sum + num.get(i);
mean = sum / num.size();
latch.countDown();
System.out.println("mean: " + mean);
class CountMidThread extends Thread
List<Double> num;
double sum = 0.0;
double mid = 0.0;
CountDownLatch latch;
public CountMidThread(List<Double> num,CountDownLatch latch)
this.num = num;
this.latch = latch;
@Override
public void run()
for(int i = 0;i < num.size();i++)
sum = sum + num.get(i);
// 对list排序,中位数就是num[num.length/2];
Arrays.sort(new List[]num);
mid = num.get(num.size() / 2);
System.out.println("mid: " + mid);
latch.countDown();
class ShowMeBug
public static void main(String[] args)
System.out.println("Hello World!");
List<Double> num = new ArrayList(10);
num.add(0.1);
num.add(0.2);
num.add(0.3);
num.add(0.7);
num.add(0.9);
System.out.println("Hello World!");
double maxNum = Solution.solution(num);
System.out.println("maxNum: " + maxNum);
以上是关于面试真题给定一个List<Double>num,每个元素的值随机从[0,1]取,请用2个线程分别计算num的均值和中位数;要求并行执行,等到两个线程都执行完毕后,取均值和中位数的最大值作为输出的主要内容,如果未能解决你的问题,请参考以下文章
面试真题给定3个班级,班级id号分别为c1,c2,c3,随机生成一个List<Student> students,每个班级的score和classId均随机,输出每个班级里学生的平均成绩
面试真题给定3个班级,班级id号分别为c1,c2,c3,随机生成一个List<Student> students,每个班级的score和classId均随机,输出每个班级里学生的平均成绩
面试真题设计一个抢红包算法,单个红包最大不能超过总金额的90%
面试真题设计一个抢红包算法,单个红包最大不能超过总金额的90%