高频手撕算法题

  • 输出数组中出现次数最多的字母前数字的和(mt)
    (emmm不知道思路有没有想复杂了…)
    var arr=[1,4,6,'a','c','e',4,'a',6,7,'c','c'];
    var more=new Map;//利用哈希表找出出现次数最多的字符
    var s;
    var sum=0;
    for(var ele of arr){   
        if((typeof ele)=="string"){
            if(more.has(ele)) more.set(ele,more.get(ele)+1);//已经存在,value+1
            else more.set(ele,1);//不存在,存进哈希表,value初始值为1
        }
        var max=Math.max(more.get(ele));//max为最多的出现次数
    }
    for(var [key,value] of more){
        if(max==more.get(key)) s=key;//s为出现次数最多的字符
    }
    var lastindex=arr.lastIndexOf(s);
    for(var i=0;i<lastindex;i++){//定位到出现次数最多的字符前
        if((typeof arr[i])=='number')sum+=arr[i];//元素类型为number,则加进sum
    }
    console.log(more);
    console.log(max);
    console.log(s);
    console.log(lastindex);
    console.log(sum);
    

在这里插入图片描述


  • 数组扁平化(笔试也遇到过)
var arr=[[1,2,[2,[1,2],3]],[3,4,[5,0]],[6,7],[8,9]];
var ret=[];
function fn(arr){    
    for(var a of arr){
        if((typeof a)=='object'){//注意是object不是array!!!
            fn(a);
        }
        else ret.push(a);
    }
    return ret;
}
console.log(fn(arr));
console.log(arr);

在这里插入图片描述


  • 实现斐波那契数列
function fibonacci(num){
    var arr=[0,1];
    while(arr.length<num){
        let temp=arr.length-1;
        arr.push(arr[temp]+arr[temp-1]);
    }    
    return arr;
}
console.log(fibonacci(15))

在这里插入图片描述


  • 实现trim函数(去除字符串左右两边空格)
function trim1(str){
    return str.replace(/(^\s*)|(\s*$)/g,'');
}

说明:
^ 表示匹配非输入括号内的字符
\s 表示任何空白符 (\S 表示任何非空白符)
* 表示匹配前面子表达式零次或多次
g 表示全局匹配


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值