最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 少侠,来试着完成 3 个简单有趣的数组题,并解锁它们背后隐藏的线索吧~

    正文概述 掘金(乌云背后的幸福线)   2021-01-06   473

    少侠,来试着完成 3 个简单有趣的数组题,并解锁它们背后隐藏的线索吧~

    少侠们好~

    在上一节的内容中,我们已经了解了关于数组的一些基本特点,以及常用的数组函数。

    在这一节中,我们会分享 3 道比较基础但是有趣的数组相关的题,它们的解题思路和代码实现。

    虽然只有 3 道题,但是这3道题背后都有着各自的故事,如果你完成它们的话,就有机会进一步探索相关的线索,解锁隐藏的技能,所以请一定要确保你理解了它们,这样才能方便迎接后续更难的挑战!

    为了更好地从中获得收获,我们建议你在理解了题目意思后,先自行试着尝试完成,看能不能写出正确的代码。

    如果实在没有好的思路,最后再查看我们提供的解题答案,因为只有通过你自己的思考,你才会真正的理解这些知识点。

    当然,无论你是选择直接看答案,只通过阅读方式学习,还是一边看,一边亲自动手做,最后再看答案,你的努力都值得被认可,我们也尊重你的选择,

    但不管怎样,我们希望你能认真对待他们,因为这些题可能是你将来面试时遇见的题,当你解决问题时灵光一闪的思路,又或者,

    某天哪个程序员妹子突然问你一道相关的题也说不定呢~

    少侠,来试着完成 3 个简单有趣的数组题,并解锁它们背后隐藏的线索吧~

    好了,废话先不多说了,让我们正式进入今天的内容吧。

    挑战1,实现一个 removeEven 函数,来过滤掉一个数组中所有的偶数,并返回过滤后的新数组。

    少侠,来试着完成 3 个简单有趣的数组题,并解锁它们背后隐藏的线索吧~

    解题思路:

    1,手动遍历筛选出所需的元素。

    题目要求我们过滤掉数组中的偶数,返回一个过滤后的新数组,

    最简单的方式是我们创建一个新的空数组,然后手动遍历数组中的每一项,把其中的奇数添加到一个新数组里面,遍历完后,新的数组就只剩下奇数了。

    代码实现:

    少侠,来试着完成 3 个简单有趣的数组题,并解锁它们背后隐藏的线索吧~

    时间复杂度:

    由于我们需要遍历数组中的每一项,所以时间复杂度是 O(n)。

    2,使用数组内置的 filter 函数。

    另外一种方式是直接使用数组内置的 filter 函数,传递给它一个用于筛选的函数,它会依次将数组中的每个元素传递给我们的筛选函数,如果筛选函数返回结果为 true,该元素就会留下,如果为 false,则会过滤掉,如果你不是很清楚 filter 的用法的话,也不用急,以后我们会专门提到他们。

    代码实现:

    少侠,来试着完成 3 个简单有趣的数组题,并解锁它们背后隐藏的线索吧~

    时间复杂度:

    和之前一样,只是语法变了,我们还是只遍历数组中的每一项,所以时间复杂度依然是 O(n)。

    挑战2,实现一个 merge 函数,这个函数接受2个排序后的数组,你需要做的是合并这 2 个数组,使它返回一个由这两个数组元素组成的一个新的排序后的数组。

    少侠,来试着完成 3 个简单有趣的数组题,并解锁它们背后隐藏的线索吧~

    解题思路:

    方法1,先合并 2 个数组,然后对合并后的数组重新进行排序。

    这种方案是最简单直接的方式了,我们都不用管 2 个数组原先是什么顺序,我们统一先合并,然后统一排序。

    代码实现:

    少侠,来试着完成 3 个简单有趣的数组题,并解锁它们背后隐藏的线索吧~

    时间复杂度:

    合并数组的时间复杂度是O(n + m),但是由于我们合并后还需要排序,而最好的排序算法时间复杂度是O(nlogn),我们取最大的时间复杂度,所以时间复杂度是 O(nlogn)。

    方法 2:

    实际上,由于题目中已经告诉我们,传递进来的 2 个数组是排序后的数组,我们可以利用好这个特点,创建一个新数组,然后用两个指针,依次从两个数组的第一个元素开始比较,每次将较小的元素添加到新数组中,然后移动指针,继续和下一个元素比较,以此类推,这样我们最多每个数组遍历一次就可完成。

    通过下面的图片你应该可以更方便的明白什么意思~

    少侠,来试着完成 3 个简单有趣的数组题,并解锁它们背后隐藏的线索吧~

    少侠,来试着完成 3 个简单有趣的数组题,并解锁它们背后隐藏的线索吧~

    少侠,来试着完成 3 个简单有趣的数组题,并解锁它们背后隐藏的线索吧~

    少侠,来试着完成 3 个简单有趣的数组题,并解锁它们背后隐藏的线索吧~

    少侠,来试着完成 3 个简单有趣的数组题,并解锁它们背后隐藏的线索吧~

    少侠,来试着完成 3 个简单有趣的数组题,并解锁它们背后隐藏的线索吧~

    少侠,来试着完成 3 个简单有趣的数组题,并解锁它们背后隐藏的线索吧~

    少侠,来试着完成 3 个简单有趣的数组题,并解锁它们背后隐藏的线索吧~

    少侠,来试着完成 3 个简单有趣的数组题,并解锁它们背后隐藏的线索吧~

    代码实现:

    少侠,来试着完成 3 个简单有趣的数组题,并解锁它们背后隐藏的线索吧~

    时间复杂度:

    由于每个数组只会遍历一遍,所以时间复杂度是O(m + n), m 和 n 分别是第一个数组的长度和第 2 个数组的长度。

    OK,现在少侠你知道了,**对于任意两个排序后的数组,我们可以在O(m + n)的时间复杂度内将它们合并成一个新的排序后的数组,**请记住这个特点,因为在以后学习排序算法时,我们还会遇见它,世界上最好的排序算法之一正是利用了这个特点。

    挑战3,实现一个 findMinimum 函数,这个函数接受 1 个无序的数字数组,希望你返回其中的最小的元素。

    少侠,来试着完成 3 个简单有趣的数组题,并解锁它们背后隐藏的线索吧~

    解题思路:

    方法1,先将数组中的元素从小到大排序,然后返回第一个元素。

    少侠,来试着完成 3 个简单有趣的数组题,并解锁它们背后隐藏的线索吧~

    时间复杂度:

    由于我们需要先对数组进行排序,所以时间复杂度是 O(nlogn)。

    方法2,从第一个元素开始遍历数组,每次检测是否找到了更小的元素,一直到数组末尾。

    想象你在读书的时候,如果老师需要找到成绩最好的人,可以怎么做呢?

    她可以随便抽取一位同学,了解他的分数,然后看其他人是否有更高的分数,如果有,就拿着这个更高的分数,再问问看其他人是否比他还高的分数,依此类推,直到全班所有人比较完毕。

    所以我们可以先假设数组第一个元素是最小的,将它保存起来,依次遍历,如果找到更小的,就用这个更小的元素替换掉,再和后面的元素继续比较,直到遍历结束。

    少侠,来试着完成 3 个简单有趣的数组题,并解锁它们背后隐藏的线索吧~

    时间复杂度:

    由于我们只需要遍历数组一遍,所以时间复杂度是O(n)

    完全OK,经过你不懈的努力,你终于完成了这奇怪的 3 道题。

    这 3 道题原本只是你从地上捡来的一张卷轴上看见的,

    只是出于兴趣做一做,但是没想到的是,在你完成后,卷轴上突然出现了一些新的文字,这时你才发现,原来这 3 道题只是一个入门测验,

    根据卷轴上的提示,在你完成之后,你可以继续选择探索属于他们背后的故事:

    线索 1

    继续探索 挑战1 中的 filter 背后的故事,有一定几率解锁部分江湖中的少见的函数式编程技巧。

    “既然大家都喜欢纯洁的东西,那么纯函数,想必你也会很喜欢吧!”

    线索 2

    选择先探索 挑战2 背后的故事,有一定几率领悟江湖中最顶尖的排序算法之一,归并排序

    “什么?不知道排序算法 O(nlogN) 的时间复杂度是怎么来的?那你算是来对地方了!”

    线索 3

    选择探索 挑战3 背后的故事,有较大几率领悟江湖中的烂大街热门技能,冒泡排序

    “搞错没有啊,就 100 个用户,你告诉我要换个性能更快的算法?”

    完全OK!

    这就是本期的内容了,希望少侠你有所收获,玩的开心。

    你可以根据最后的线索自行探索剩余的内容,做出你自己的选择,也可以看看我们下一次会如何选择,猜对了下次分享一个提高买彩票中500万的秘籍!


    起源地下载网 » 少侠,来试着完成 3 个简单有趣的数组题,并解锁它们背后隐藏的线索吧~

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元