阿里前端笔试算法题。做个记录。

我笔试的时候并没有写出来。

有点懵,题目看了好久。

开始写的时候一开始思路也没正确打开。

笔试完了,安静思考了一会儿就解决了。

如果不正,欢迎指出。

交卷的时候截图的,所有一个图层。见谅~

code如下:

        function solve(arr){
            let newArr = []
            for(let i = 0;i<arr.length; ){
                flag:
                if(arr[i]>=arr.length-i){  //如果可以直达最后一项,则直接存入该项跟最后一项,然后返回。   
                    newArr.push(arr[i])
                    newArr.push(arr[arr.length-1])
                    return newArr
                }
                else{
                    for(let k = 1;k<arr[i];k++){   //循环遍历接下来的arr[i]步内的节点
                        let slice = arr.slice(k+i+1,i+arr[i]+1)   //slice(start,end)返回指定下标区间的数组,不包含end项,不改变原数组
                        let left = 0            //计数,该值是未走节点可用步数之和。
                        slice.forEach(e=>{
                            left+=e
                        })
                        if(arr[k+i]>=arr.length-i){        //arr[k+i]此节点可以直达终点则跳到此节点。
                            newArr.push(arr[i])
                            i=i+k
                            break flag         //跳出循环,进入下一次循环。
                        }
                        else if(arr[i+k]>left){       //如果arr[i+k]节点步数大于(i+k~i+arr[i])未走节点步数之和,则跳到此节点 
                            newArr.push(arr[i])
                            i=i+k
                            break flag
                        }
                    }
                    newArr.push(arr[i])          //接下来的节点无大步数。
                    i=i+arr[i]
                }
            }
            return newArr
        }
        console.log(solve([4, 8, 4, 1, 2,1,1,1,1, 1, 8, 5]))   // [4, 8, 1, 8, 5]

 

 

 

 

还有一道算法结合dom操作的题目

要求转换成下面的dom结构

红色部分表示其他菜单

篇幅限制 解题代码我传到了github上面,有需要可以自取:

https://github.com/mango-lzp/webRectangle/blob/master/v-for.html

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Manggoo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值