寻找年度最佳球员算法 JavaScript/Java
Find the player of the year Algorithm JavaScript/Java
谁能帮我解决这个问题,我不太了解示例输入格式。有人可以用这个算法的伪代码指导我吗??
有多个折线图表示不同运动队中明星球员的表现。
年度最佳球员排名第一的时间最长,即图表值保持在所有球员值之上时间最长的球员。
寻找年度最佳球员。
输入格式
第一行包含一个整数n,表示玩家的数量。
下一行包含一个整数 m,表示每个玩家的数据点数。
n 个后续行(其中 0 ≤ i < n)中的每一行 i 包含 m space 个分隔的整数,表示玩家 i 在该数据点持续时间内的相对表现。
输出格式
一个整数
示例输入
3
4
1 3 4 5
7 2 3 4
1 3 2 1
示例输出
0
说明
Player 0 has been on the top for 3 data point durations, which is the maximum.
方法。
function Logic() {
//INPUT [uncomment & modify if required]
let sampleInput = gets();
let result = -404;
//OUTPUT [uncomment & modify if required]
console.log(result)
}
感谢您的帮助!
为了解释示例输入,可视化表示可能会有所帮助:
纵轴是表现,横轴是测量时刻(4个数据点),每个球员用颜色来标识。
接下来的挑战是找到在最长的连续时间段内达到最高值的条形颜色。在这种情况下,蓝色条表示连续 3 个周期(标记为 2、3 和 4)中的最大性能。
算法
在第一阶段,确定每个时期的最佳性能值。所以在示例中是:7、3、4 和 5。
然后在每个球员的表现中找到与该最高表现相匹配的最长连续序列。在这种情况下,表演序列 3、4 和 5 由玩家 0 实现,并且是最长的此类序列。
实施
一个JavaScript片段:
function getPlayerOfTheYear(series) {
// The following two values are actually part of the input,
// but since this function takes a 2D array, they are implied:
let playerCount = series.length;
let periodCount = series[0].length;
// 1. Collect all best performance values (= top of the "graph")
let tops = [];
for (let i = 0; i < periodCount; i++) {
// Get best performance for this particular period:
let bestPerformance = -Infinity;
for (let player = 0; player < playerCount; player++) {
bestPerformance = Math.max(bestPerformance, series[player][i]);
}
tops.push(bestPerformance);
}
// 2. Per player, find longest sequence of achieving the top performance
let longestDuration = 0;
for (let player = 0; player < playerCount; player++) {
let duration = 0;
for (let i = 0; i < periodCount; i++) {
if (series[player][i] === tops[i]) {
duration++;
if (duration > longestDuration) {
playerOfTheYear = player;
longestDuration = duration;
}
} else duration = 0;
}
}
return playerOfTheYear;
}
let player = getPlayerOfTheYear([
[1, 3, 4, 5],
[7, 2, 3, 4],
[1, 3, 2, 1]
]);
console.log("Player of the year: ", player);
谁能帮我解决这个问题,我不太了解示例输入格式。有人可以用这个算法的伪代码指导我吗??
有多个折线图表示不同运动队中明星球员的表现。
年度最佳球员排名第一的时间最长,即图表值保持在所有球员值之上时间最长的球员。
寻找年度最佳球员。
输入格式
第一行包含一个整数n,表示玩家的数量。 下一行包含一个整数 m,表示每个玩家的数据点数。 n 个后续行(其中 0 ≤ i < n)中的每一行 i 包含 m space 个分隔的整数,表示玩家 i 在该数据点持续时间内的相对表现。
输出格式
一个整数
示例输入
3
4
1 3 4 5
7 2 3 4
1 3 2 1
示例输出
0
说明
Player 0 has been on the top for 3 data point durations, which is the maximum.
方法。
function Logic() {
//INPUT [uncomment & modify if required]
let sampleInput = gets();
let result = -404;
//OUTPUT [uncomment & modify if required]
console.log(result)
}
感谢您的帮助!
为了解释示例输入,可视化表示可能会有所帮助:
纵轴是表现,横轴是测量时刻(4个数据点),每个球员用颜色来标识。
接下来的挑战是找到在最长的连续时间段内达到最高值的条形颜色。在这种情况下,蓝色条表示连续 3 个周期(标记为 2、3 和 4)中的最大性能。
算法
在第一阶段,确定每个时期的最佳性能值。所以在示例中是:7、3、4 和 5。
然后在每个球员的表现中找到与该最高表现相匹配的最长连续序列。在这种情况下,表演序列 3、4 和 5 由玩家 0 实现,并且是最长的此类序列。
实施
一个JavaScript片段:
function getPlayerOfTheYear(series) {
// The following two values are actually part of the input,
// but since this function takes a 2D array, they are implied:
let playerCount = series.length;
let periodCount = series[0].length;
// 1. Collect all best performance values (= top of the "graph")
let tops = [];
for (let i = 0; i < periodCount; i++) {
// Get best performance for this particular period:
let bestPerformance = -Infinity;
for (let player = 0; player < playerCount; player++) {
bestPerformance = Math.max(bestPerformance, series[player][i]);
}
tops.push(bestPerformance);
}
// 2. Per player, find longest sequence of achieving the top performance
let longestDuration = 0;
for (let player = 0; player < playerCount; player++) {
let duration = 0;
for (let i = 0; i < periodCount; i++) {
if (series[player][i] === tops[i]) {
duration++;
if (duration > longestDuration) {
playerOfTheYear = player;
longestDuration = duration;
}
} else duration = 0;
}
}
return playerOfTheYear;
}
let player = getPlayerOfTheYear([
[1, 3, 4, 5],
[7, 2, 3, 4],
[1, 3, 2, 1]
]);
console.log("Player of the year: ", player);