ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

1、美团算法题

2021-10-02 13:34:42  阅读:138  来源: 互联网

标签:arr 前缀 res 字母 算法 let 数组 美团


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. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有