游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

面试了十几个高级前端,竟然连(扁平数据结构转Tree)都写不

  前言
  招聘季节一般都在金三银四,或者金九银十。最近在这五六月份,陆陆续续面试了十几个高级前端。有一套考察算法的小题目。后台返回一个扁平的数据结构,转成树。
  我们看下题目:打平的数据内容如下:letarr〔{id:1,name:部门1,pid:0},{id:2,name:部门2,pid:1},{id:3,name:部门3,pid:1},{id:4,name:部门4,pid:3},{id:5,name:部门5,pid:4},〕复制代码
  输出结果〔{id:1,name:部门1,pid:0,children:〔{id:2,name:部门2,pid:1,children:〔〕},{id:3,name:部门3,pid:1,children:〔结果,,,〕}〕}〕复制代码
  我们的要求很简单,可以先不用考虑性能问题。实现功能即可,回头分析了面试的情况,结果使我大吃一惊。
  10的人没思路,没碰到过这种结构
  60的人说用过递归,有思路,给他个笔记本,但就是写不出来
  20的人在引导下,磕磕绊绊能写出来
  剩下10的人能写出来,但性能不是最佳
  感觉不是在招聘季节遇到一个合适的人真的很难。
  接下来,我们用几种方法来实现这个小算法什么是好算法,什么是坏算法
  判断一个算法的好坏,一般从执行时间和占用空间来看,执行时间越短,占用的内存空间越小,那么它就是好的算法。对应的,我们常常用时间复杂度代表执行时间,空间复杂度代表占用的内存空间。时间复杂度
  时间复杂度的计算并不是计算程序具体运行的时间,而是算法执行语句的次数。
  随着n的不断增大,时间复杂度不断增大,算法花费时间越多。常见的时间复杂度有常数阶O(1)对数阶O(log2n)线性阶O(n)线性对数阶O(nlog2n)平方阶O(n2)立方阶O(n3)k次方阶O(nK)指数阶O(2n)计算方法选取相对增长最高的项最高项系数是都化为1若是常数的话用O(1)表示
  举个例子:如f(n)3n43n300则O(n)n4
  通常我们计算时间复杂度都是计算最坏情况。计算时间复杂度的要注意的几个点如果算法的执行时间不随n的增加而增长,假如算法中有上千条语句,执行时间也不过是一个较大的常数。此类算法的时间复杂度是O(1)。举例如下:代码执行100次,是一个常数,复杂度也是O(1)。letx1;while(x100){x;}复制代码有多个循环语句时候,算法的时间复杂度是由嵌套层数最多的循环语句中最内层语句的方法决定的。举例如下:在下面for循环当中,外层循环每执行一次,内层循环要执行n次,执行次数是根据n所决定的,时间复杂度是O(n2)。for(i0;in;i){for(j0;jn;j){。。。code}}复制代码循环不仅与n有关,还与执行循环判断条件有关。举例如下:在代码中,如果arr〔i〕不等于1的话,时间复杂度是O(n)。如果arr〔i〕等于1的话,循环不执行,时间复杂度是O(0)。for(vari0;inarr〔i〕!1;i){。。。code}复制代码空间复杂度
  空间复杂度是对一个算法在运行过程中临时占用存储空间的大小。计算方法:忽略常数,用O(1)表示递归算法的空间复杂度(递归深度n)(每次递归所要的辅助空间)
  计算空间复杂度的简单几点仅仅只复制单个变量,空间复杂度为O(1)。举例如下:空间复杂度为O(n)O(1)。leta1;letb2;letc3;console。log(输出a,b,c,a,b,c);复制代码递归实现,调用fun函数,每次都创建1个变量k。调用n次,空间复杂度O(n1)O(n)。functionfun(n){letk10;if(nk){returnn;}else{returnfun(n)}}复制代码不考虑性能实现,递归遍历查找
  主要思路是提供一个递getChildren的方法,该方法递归去查找子集。就这样,不用考虑性能,无脑去查,大多数人只知道递归,就是写不出来递归查找,获取childrenconstgetChildren(data,result,pid){for(constitemofdata){if(item。pidpid){constnewItem{。。。item,children:〔〕};result。push(newItem);getChildren(data,newItem。children,item。id);}}}转换方法constarrayToTree(data,pid){constresult〔〕;getChildren(data,result,pid)returnresult;}复制代码
  从上面的代码我们分析,该实现的时间复杂度为O(2n)。不用递归,也能搞定
  主要思路是先把数据转成Map去存储,之后遍历的同时借助对象的引用,直接从Map找对应的数据做存储functionarrayToTree(items){constresult〔〕;存放结果集constitemMap{};先转成map存储for(constitemofitems){itemMap〔item。id〕{。。。item,children:〔〕}}for(constitemofitems){constiditem。id;constpiditem。pid;consttreeItemitemMap〔id〕;if(pid0){result。push(treeItem);}else{if(!itemMap〔pid〕){itemMap〔pid〕{children:〔〕,}}itemMap〔pid〕。children。push(treeItem)}}returnresult;}复制代码
  从上面的代码我们分析,有两次循环,该实现的时间复杂度为O(2n),需要一个Map把数据存储起来,空间复杂度O(n)最优性能
  主要思路也是先把数据转成Map去存储,之后遍历的同时借助对象的引用,直接从Map找对应的数据做存储。不同点在遍历的时候即做Map存储,有找对应关系。性能会更好。functionarrayToTree(items){constresult〔〕;存放结果集constitemMap{};for(constitemofitems){constiditem。id;constpiditem。pid;if(!itemMap〔id〕){itemMap〔id〕{children:〔〕,}}itemMap〔id〕{。。。item,children:itemMap〔id〕〔children〕}consttreeItemitemMap〔id〕;if(pid0){result。push(treeItem);}else{if(!itemMap〔pid〕){itemMap〔pid〕{children:〔〕,}}itemMap〔pid〕。children。push(treeItem)}}returnresult;}复制代码
  从上面的代码我们分析,一次循环就搞定了,该实现的时间复杂度为O(n),需要一个Map把数据存储起来,空间复杂度O(n)小试牛刀
  方法
  1000(条)
  10000(条)
  20000(条)
  50000(条)
  递归实现
  154。596ms
  1。678s
  7。152s
  75。412s
  不用递归,两次遍历
  0。793ms
  16。499ms
  45。581ms
  97。373ms
  不用递归,一次遍历
  0。639ms
  6。397ms
  25。436ms
  44。719ms
  从我们的测试结果来看,随着数量的增大,递归的实现会越来越慢,基本成指数的增长方式。结束语
  大家觉得高级前端,该不该很顺利的把这个给写出来。评论区留下你的见解。有比以上更好的实现,评论区留下你的答案,大家一起学习。
  原文地址:https:juejin。cnpost6983904373508145189

首批用户抱怨微软SurfaceDuo存较多软硬件Bug屏幕闪IT之家9月14日消息微软已经在美国开售SurfaceDuo,售价1399美元起。这款已经开发了好几年的SurfaceDuo终于迎来消费者市场的考验,结果表明,微软似乎还有很多……美国芯片暴跌还是卖不出去,美媒一语道破真相中国市场不买了大家都知道,中国市场是全球最大的芯片消耗市场,每年都需要从海外企业采购上亿规模的芯片,而美国又是芯片出口大国,美企的芯片订单大部分都来自中国企业。比如小米、ov等国产手机厂商使……成都天府通小米手机NFC卡正式上线感谢IT之家网友tsong1127的线索投递!IT之家9月17日消息成都天府通小米手机NFC卡于今年8月开启内测,并于今日正式上线。根据此前信息,小米NFC先在天府……联想刀锋5G折叠屏手机在联想武汉5G智能工厂自主生产IT之家9月11日消息根据联想官方的消息,昨天刚刚发布的刀锋5G折叠屏手机已在联想武汉5G智能工厂自主生产、组装、测试、交付,运往全球160个市场。图自联想微信公众号……短道速滑混合接力冲首金武大靖给中国代表团打样昨晚,中国短道速滑队在北京冬奥会场地、首都体育馆进行了农历虎年的第一次训练,整个训练持续时长为50分钟,训练结束后接受采访武大靖表示:我们将全力以赴,给中国代表团打个样。……三星OneUI3。0大量截图曝光基于Android11IT之家9月15日消息三星曾在上个月宣布了GalaxyS20系列的OneUI3。0测试版计划。今天早些时候,该公司开始向韩国和美国的注册开发者推出了新系统的预测试版。On……外媒三星GalaxyS21可能是最后一代没有屏下摄像头的旗舰IT之家9月12日消息据外媒PhoneArena今日报道,虽然三星也在研发屏下摄像头技术,但由于时间问题,三星GalaxyS21恐将无缘屏下摄像头,而是采用打孔屏方案,这也是三……微信安卓版7。0。19(1760)正式版发布感谢IT之家网友FlowerChick的线索投递!IT之家9月18日消息,腾讯昨日发布了微信7。0。19(1760)forAndroid正式版。相比7。0。19(1740……男人带娃,需要套路女人在怀孕阶段就慢慢成为母亲。而没有经历过胎动、分娩、激素作用的男人,是在后来的某一天才真正成为父亲的。这一点在女儿啾啾出生后不久就初露端倪。当时我还在催产素……做团餐卖土特产玩自媒体民宿人这几年的酸甜苦辣现代快报讯(记者陈敏)疫情之下,各行各业都受到影响,旅游民宿业更是首当其冲。2016年起,从南京大学新闻系毕业的杨宽回到家乡无锡宜兴,抱着带领村民共同致富的初心,打造民宿品牌,……华硕ROG游戏手机3全面搭载诺基亚OZOAudioIT之家7月24日消息7月23日,华硕ROG游戏手机3发布,搭载了最高骁龙865Plus处理器、144HzAMOLED屏,最高16GB内存,售价3999元起。据诺基亚方面确认,……马云低调套现上千亿后,阿里的新结果出炉,人民日报没说错多学学、多看看!点击关注,每天精彩不断!导读:马云低调套现上千亿后,阿里的新结果出炉,人民日报没说错!作为中国顶尖的互联网公司之一,多年来,阿里巴巴在家中也都是顺风……
必逛教育展丨教育创新主题应用体验展,感受教育数字化未来第八届互联网教育创新周于8月13日20日在中关村互联网教育创新中心举办。作为2022中关村创新创业季系列精彩活动之一,本届创新周以创新教育服务供给,推动教育数字转型为主题,汇聚……新年第一罚!陈戌源下狠手,21岁新星拳击裁判,禁赛1年罚款2北京时间1月11日,中国足协开出重磅罚单,主要针对大连人俱乐部,21岁新星杨浩宇因为拳击裁判,被禁赛1年,罚款20万人民币。大连人俱乐部累计8人被罚,总罚款金额83万人民币。这……坚果Pro3双12预热开启到手价2598元,加购送好礼IT之家12月9日消息双12将至,坚果Pro3天猫限时优惠活动来袭。坚果Pro38GB128GB版本在天猫双12期间降价300元,原价2899元到手价2599元还可享三期免息。……115比98逆转深圳队!最强主场助辽篮拿下关键战在辽宁体育馆12000名球迷的助威下,就在今晚,辽宁男篮以115比98逆转此前九连胜的深圳队。震耳欲聋的加油声,此起彼伏的人浪,球迷们打造的最强主场助力辽篮拿下常规赛主场的最关……邱贻可很为难!孙颖莎内战不过关遭球迷质疑,蒯蔓五输外战更揪心邱贻可自从去年成为孙颖莎的主管教练之后名声大燥。球迷都期盼他能带领莎莎创造出好的成绩,并且带动手下其他弟子实现突破。不过通过近期的赛事看,邱贻可的执教生涯陷入困难时期。几位女弟……一套系统走天下梦碎?Google从Android移除大量Fu整理苏宓出品CSDN(ID:CSDNnews)Android的神话能否在Google打造的Fuchsia操作系统身上延续,或许挺难。近日,有媒体发现大量与Fu……TNT归来新增分享模式与虚拟触控板2。0,支持无线TNTIT之家10月31日消息今日晚间,在北京工业大学奥林匹克体育馆举行的坚果手机2019新品发布会上,SmartisanOS产品经理朱海舟正式发布了SmartisanOS7。0。S……坚果Pro3手机推送SmartisanOS7。2。0Beta感谢IT之家网友小胖胖pro的线索投递!IT之家11月8日消息在北京工业大学奥林匹克体育馆举行的坚果手机2019新品发布会上,SmartisanOS产品经理朱海舟正式发布……什么社交聊天软件在手机上看起来不像聊天应用?软件应用市场上的各种功能各异的社交聊天软件非常多,有些社交聊天软件一眼看上去就知道其的主要功能,还有一些事我们大众熟知的几乎是人手必备的,大家都非常熟悉里面的各种功能,但是也有……华为Mate2020Pro20X将不再接收月度季度安全更新IT之家1月18日消息根据华为官网消息,华为目前已经将Mate2020Pro20X三款手机从EMUI安全更新的支持列表中删除,将不会接收月度季度安全更新。目前仅保留华为Mate……敢为安卓先,realme首款支持磁吸式无线充电的手机曝光可达IT之家7月26日消息外媒GSMArena今日曝光了realme的一款技术展示机,该机采用单打孔曲面屏,拥有矩阵式后置三摄设计,是安卓阵营首款支持磁吸式无线闪充的手机,功率至少……三星在美国和韩国推出BixbyMarketplace应用商店北京时间7月2日早间消息,三星今日推出BixbyMarketplace应用商店,第三方开发者可通过这个应用商店提供兼容Bixby的服务。事实上,三星几天前就已开始推出这个应用商……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网