既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
描述
产品经理(PM)有很多好的idea,而这些idea需要程序员实现。现在有N个PM,在某个时间会想出一个 idea,每个 idea 有提出时间、所需时间和优先等级。对于一个PM来说,最想实现的idea首先考虑优先等级高的,相同的情况下优先所需时间最小的,还相同的情况下选择最早想出的,没有 PM会在同一时刻提出两个 idea。
同时有M个程序员,每个程序员空闲的时候就会查看每个PM尚未执行并且最想完成的一个idea,然后从中挑选出所需时间最小的一个idea独立实现,如果所需时间相同则选择PM序号最小的。直到完成了idea才会重复上述操作。如果有多个同时处于空闲状态的程序员,那么他们会依次进行查看idea的操作。
求每个idea实现的时间。
输入描述:
输入第一行三个数N、M、P,分别表示有N个PM,M个程序员,P个idea。随后有P行,每行有4个数字,分别是PM序号、提出时间、优先等级和所需时间。
所有输入数据范围为 [1, 3000]
输出描述:
输出P行,分别表示每个idea实现的时间点。
示例1
输入:
2 2 5 1 1 1 2 1 2 1 1 1 3 2 2 2 1 1 2 2 3 5 5
输出:
3 4 5 3 9
题解:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
static class Idea {
int id; //不是pm的编号
int create;//产生时间;
int power; //优先级
int need; //需要时间
int finish;
public Idea(int id, int create, int power, int need){
this.id = id;
this.create = create;
this.power = power;
this.need = need;
this.finish = -1;
}
}
public static void main(String[] args) throws IOException{
BufferedReader buff = new BufferedReader(new InputStreamReader(System.in));
String[] s0 = buff.readLine().split(" ");
int n = Integer.parseInt(s0[0]); //pm,没用上此变量
int m = Integer.parseInt(s0[1]); //程序员
int p = Integer.parseInt(s0[2]);
int[] programer = new int[m];//标记程序员还有多少时间干完活
HashMap<Integer, Idea> map = new HashMap<>();
//生产线 //
PriorityQueue<Idea> createQ = new PriorityQueue<>(Comparator.comparingInt(o -> o.create));
//待完成任务 //
PriorityQueue<Idea> taskQ = new PriorityQueue<>(new Comparator<Idea>() {
@Override public int compare(Idea o1, Idea o2){
if(o1.power > o2.power){
return 1;
}else if(o1.power < o2.power){
return -1;
}else{
if(o1.need > o2.need){
return 1;
}else if(o1.need < o2.need){
return -1;
}else{
if(o1.create > o2.create){
return 1;
}else if(o1.create < o2.create){
return -1;
}else{
return 0;
}
}
}
}
});
//生产计划********************//
for(int i = 0; i < p; i++){
int[] temp = Arrays.stream(buff.readLine().split(" ")).mapToInt(Integer::parseInt).toArray();
Idea idea = new Idea(i, temp[1], temp[2], temp[3]);
map.put(i, idea);
createQ.add(idea);
}
//两个Queue都是空时,停止
int k = 0;
while ((!taskQ.isEmpty()) || (!createQ.isEmpty())) {
while ((!createQ.isEmpty()) && createQ.peek().create == k) {
taskQ.offer(createQ.poll());
}
int indexProgramer = 0;//遍历每一个程序员
while (indexProgramer < programer.length) {
if(programer[indexProgramer] > 0){
programer[indexProgramer]--; //程序员干活啦
indexProgramer++;
}else{//这个程序员空闲
if(taskQ.isEmpty()){
indexProgramer++;
}else{//有任务做了
Idea idea = taskQ.poll();
idea.finish = k + idea.need;//计算完成时间
programer[indexProgramer] = idea.need;//程序员需要消耗的时间
}
}
}
k++;//时间增加
}
for(int i = 0; i < p; i++){
System.out.println(map.get(i).finish);
}
}
}
三、数列的和
描述
数列的定义如下:数列的第一项为n,以后各项为前一项的平方根,求数列的前m项的和。
输入描述:
输入数据有多组,每组占一行,由两个整数n(n<10000)和m(m<1000)组成,n和m的含义如前所述。
输出描述:
对于每组输入数据,输出该数列的和,每个测试实例占一行,要求精度保留2位小数。
示例1
输入:
81 4 2 2
输出:
94.73 3.41
题解:
import java.util.Scanner;
public class Main {
/**
* 数列 n .. 的前 m 项和
* 输入:81 4 2 2
* 输出: 94.73 3.41
*/
public static void main(String[] args) {
run();
}
private static void nSum(int n, int m) {
double res = n;
double sum = 0;
for (int i = 0; i < m; i++) {
sum += res;
res = Math.sqrt(res);
}
System.out.println(String.format("%.2f", sum));
}
private static void run() {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
String[] inputs = sc.nextLine().split(" ");
int n = Integer.parseInt(inputs[0]);
int m = Integer.parseInt(inputs[1]);
nSum(n, m);
}
}
}
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
…(img-DAUf7yfn-1715771025442)]
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!