本文解答了关于《注意多次征集的情况》相关内容,同时关于1、注意多次征集的情况有哪些,2、多次征集志愿是什么意思,3、多次征求意见,的相关问答本篇文章福途教育网小编也整理了进来,希望对您有帮助。
注意多次征集的情况
/**
* @param {string[]} votes
* @return {string}
*/
//计数
var rankTeams = function (votes) {
if (votes.length < 2) return votes[0];
let map = {};
let len = votes[0].length;
votes.forEach((vote) => {
// console.log(vote);
for (let i = 0; i < len; i++) {
// console.log(vote[i]);
if (map[vote[i]]) {
map[vote[i]][i] = map[vote[i]][i] + 1
1;
} else {
map[vote[i]] = new Array(len).fill(0);
map[vote[i]][i] = 1;
}
}
});
let teamArr = Object.keys(map);
teamArr.sort((t1, t2) => {
for (let j = 0; j < len; j++) {
if (map[t1][j] < map[t2][j]) {
return 1;
}
if (map[t1][j] > map[t2][j]) {
return -1;
}
}
return t1 > t2 ? 1 : -1;
});
return teamArr.join("");
};
//桶排序 + 双端队列
var rankTeams = function (votes) {
// 初始化桶数组,长度与最后要排序的字符串长度一致
let len = votes[0].length;
let buckets = new Array(len);
for (let i = 0; i < buckets.length; i++) {
buckets[i] = new Array(26).fill(0);
}
// 统计每个组员和对应位置票数放到桶里,桶里放的是组员索引+1
for (let i = 0; i < votes.length; i++) {
for (let j = 0; j < votes[i].length; j++) {
buckets[j][votes[i][j].charCodeAt() - "A".charCodeAt()] += 1;
}
}
// 使用一个队列来存储组员组合后的最终结果字符串
let teamResult = new Array(len);
for (let i = len - 1; i >= 0; --i) {
// 如果队列是空的话,双端队列的顶点就是存放对应位置最大票数的字符
let max = 0;
let character = "A";
// 由小到大查看桶里的组员索引
for (let j = 0; j < 26; j++) {
if (buckets[i][j] > max) {
max = buckets[i][j];
character = String.fromCharCode("A".charCodeAt() + j);
}
// 所有组员都一样,所以存在票数相等的情况,此时把大写字母顺序小的放在列首
else if (max > 0 && buckets[i][j] === max) {
if (String.fromCharCode("A".charCodeAt() + j) < character) {
character = String.fromCharCode("A".charCodeAt() + j);
}
}
}
// 将最后查看出来的字符推到队列中
teamResult[i] = character;
}
return teamResult.join("");
};
总结:以上是编辑:【殷果】整理及AI智能原创关于《注意多次征集的情况
》优质内容解答希望能帮助到您。