1. 同类项统计
给定数组['1a','2b','13c','5a'],数组元素的格式是一个数字(可能多位)前缀与一个字母的组合,输出出现次数最多的字母对应的前缀数字之和。
思路:使用hash。
- 将字母作为键;
- 将数组[字母出现的次数,前缀数字之和]作为键值。
实现:
function fun(arr){
let map = new Map();
for(let i=0;i<arr.length;i++){
let n1 = arr[i].slice(0,arr[i].length-1)-'0';
let n2 = arr[i][arr[i].length-1];
if(!map.has(n2)){ //该字母第一次出现
map.set(n2,[1,n1]);
}else{ //该字母之前已出现。更新其出现的次数、累加和
let old = map.get(n2);
map.set(n2,[old[0]+1,old[1]+n1]);
}
}
let res = 0; //出现的最多次数所对应的累加和
let max = 0; //出现的最多次数
for(let key of map.keys()){//寻找出现次数最多的字母
const item = map.get(key);
if( item[0]>max){
max = item[0];
res = item[1];
}
}
return res;
}
let arr = ['1a','2b','13c','5a'];
console.log(fun(arr)); //6
标签:arr,前缀,res,字母,算法,let,数组,美团 来源: https://blog.csdn.net/sunnnnh/article/details/120584997
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。